比较Python列表的最有效方法

2024-09-20 03:48:17 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将列表相互比较。我想比较两个列表的第一位和第四位数字。 我知道我能做到 if list[1] == list[1]:但我认为有一种更有效的方法来完成它。非常感谢。我不想整体比较这些列表,只想将一个列表的x部分与另一个列表的x部分进行比较

import random
import replit
import numpy
import time
number = 0
answer = 0
guesses = 0
x = 0
useranswer = []
generated = []
for i in range (0,4):
  num = random.randrange(1,9)
  generated.append(num)
replit.clear()
print("---------------------------------------------------------------------\nWelcome to MASTERMIND! you must guess the number that was generated!\n---------------------------------------------------------------------\n")
def useranswer():
  answer = str(input("Select a 4 digit number: "))
  if len(answer) != 4:
    print("Invalid answer type")
    time.sleep(999999999)
    answer = ' '
  else:
    useranswer = list((str(answer)))
  
  
if useranswer == generated:
  print("Good job! You became the MASTERMIND in one turn!")
else: 
  while useranswer != generated:
    useranswer()
    guesses +=1
    if useranswer == generated:
      print("You have become the mastermind in " + guesses + " tries!")
    else:
      c = numpy.intersect1d(useranswer, generated, return_indices=True)[1]
      print("You got " + c + " correct! ")```

Tags: theanswerinimportyounumber列表if
1条回答
网友
1楼 · 发布于 2024-09-20 03:48:17

您始终可以使用列表切片来比较列表之间项目的指定范围

a = [1, 2, 3, 4, 7, 8]
b = [1, 2, 3, 4, 5, 6]
a[:3] == b[:3]

如果它们匹配,则上述结果将产生一个

如果您想返回两个列表之间的公共元素的索引,则有一个名为Numpy的库,它具有强大的功能,可以有效地执行此类任务

import numpy
a = [1, 2, 3, 4]
b = [0, 4, 6, 2]
_, c, d = numpy.intersect1d(a, b, return_indices=True)

这将返回以下索引:

print(c)
print(d)
array([0, 1, 3]
array([0, 3, 1])

但你的问题的答案是:

import random
import replit
import copy
import numpy
import time
number = 0
answer = 0
guesses = 0
x = 0
useranswer = []
generated = []
for i in range (0,4):
    num = random.randrange(1,9)
    generated.append(num)
replit.clear()
print("                                  -\nWelcome to MASTERMIND! you must guess the number that was generated!\n                                  -\n")
def useranswer_func():
    answer = str(input("Select a 4 digit number: "))
    if len(answer) != 4:
        print("Invalid answer type")
        time.sleep(9)  # The time provided by you is too much to wait!
        answer = ' '
    else:
        useranswer = list(answer)
        # You need to return values to use them outside the function.
        # Also your generated has int values but useranswer have str. So convert them to int or else they would never compare!
        return [int(i) for i in useranswer] 


if useranswer == generated:
      print("Good job! You became the MASTERMIND in one turn!")
else: 
    while useranswer != generated:
        # The returned values need to be stored in a variable.
        # Never use function name and variable name same. That could cause the error that you posted in the comment!
        useranswer = useranswer_func()
        guesses += 1
        if useranswer == generated:
            print("You have become the mastermind in " + str(guesses) + " tries!")
        else:
            c = []
            temp = copy.deepcopy(generated) # So that the change you make in temp is not reflected in generated variable too.
            for i in range(len(generated)):
                if generated[i] == useranswer[i]:
                    c.append(temp.index(temp[i]))
                temp[i] = None # If your generated has repeated values, the index returned will be different or else it would be always same.

            print("You got " + str(c) + " correct! ")

相关问题 更多 >