我正在尝试制作基于数字的Mastermind游戏。试图找出一个将两个列表作为参数的函数,如果列表中的索引相同,则应返回相同数量的索引。
PS。希望你明白我的意思; P
generated_number_as_list = [1,1,1,1]
guess_as_list = [1,2,1,2]
correct = right_inrightplace(guess_as_list, generated_number_as_list)
print(correct)
output >> 2
答案 0 :(得分:3)
您可以使用zip将值与对应的索引进行比较,然后将True求和,将其强制转换为1
print(sum(x==y for x,y in zip(generated_number_as_list, guess_as_list))) #2
答案 1 :(得分:1)
我在函数外部编写了它。只需在函数中复制for循环并返回ans值作为输出即可。
generated_number_as_list = [1,1,1,1]
guess_as_list = [1,2,1,2]
ans = 0
for i in range(len(generated_number_as_list)):
if guess_as_list[i] == generated_number_as_list[i]:
ans = ans + 1
print(ans)
答案 2 :(得分:1)
您也可以尝试以下操作:
a=[1,1,1,1]
b=[1,2,1,2]
print(min(len([x for x in a if x in b]),len([x for x in b if x in a])))
答案 3 :(得分:1)
您可以将sum
和map
与operator.eq
一起使用:
def right_inrightplace(a, b):
return sum(map(eq, a, b))
或者不使用其他库:
def right_inrightplace(a, b):
return sum(x == y for x, y in zip(a, b))
答案 4 :(得分:0)
有趣的是,这里有一个使用递归的解决方案:
def right_inrightplace(a, b):
if len(a) == 0 or len(b) == 0:
return 0
current = 0
if a[0] == b[0]:
current = 1
return current+right_inrightplace(a[1:],b[1:])