我如何使一个函数返回相同数量的索引

时间:2019-10-16 12:48:05

标签: python python-3.x list

我正在尝试制作基于数字的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

5 个答案:

答案 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)

您可以将summapoperator.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:])