如何解决比较列表的最有效方法 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! ")```
解决方法
您始终可以使用列表切片来比较列表之间指定范围的项目。
a = [1,2,3,4,7,8]
b = [1,5,6]
a[:3] == b[:3]
如果匹配,以上将产生 True。
如果您想返回两个列表之间公共元素的索引,有一个名为 Numpy 的库,它具有强大的功能,可以高效地完成这些工作。
import numpy
a = [1,4]
b = [0,6,2]
_,c,d = numpy.intersect1d(a,b,return_indices=True)
这将返回以下索引:
print(c)
print(d)
array([0,1,3]
array([0,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! ")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。