繁体   English   中英

python:使用嵌套for循环比较序列中的列表

[英]python: compare lists in a sequence using nested for loops

所以我有两个列表,我将一个人的答案与正确答案进行比较:

correct_answers = ['A', 'C', 'A', 'B', 'D']
user_answers = ['B', 'A', 'C', 'B', 'D']

我需要比较他们两个(不使用集合,如果可能的话)并跟踪有多少人的答案是错误的 - 在这种情况下,3

我尝试使用以下 for 循环来计算正确的数量:

correct = 0

for i in correct_answers:
    for j in user_answers:
        if i == j:
            correct += 1

print(correct)

但这不起作用,我不确定我需要改变什么才能使它起作用。

数一数:

correct_answers = ['A', 'C', 'A', 'B', 'D']
user_answers = ['B', 'A', 'C', 'B', 'D']

incorrect = sum(1 if correct != user else 0
                for correct, user in zip(correct_answers, user_answers))

我责怪@alecxe 说服我发布这个超高效的解决方案:

from future_builtins import map  # <-- Only on Python 2 to get generator based map and avoid intermediate lists; on Py3, map is already a generator
from operator import ne

numincorrect = sum(map(ne, correct_answers, user_answers))

将所有工作推送到 C 层(使其变得非常快,以设置它的初始成本为模;如果处理的值是 Python 内置类型,则不执行字节码,这消除了很多开销),以及- 将它排成一行,而不会变得太神秘。

更少 Pythonic、更通用(和可读)的解决方案也非常简单。

correct_answers = ['A', 'C', 'A', 'B', 'D']
user_answers = ['B', 'A', 'C', 'B', 'D']

incorrect = 0
for i in range(len(correct_answers)):
    if correct_answers[i] != user_answers[i]:
        incorrect += 1

这假设您的列表长度相同。 如果需要验证,可以在运行此代码之前进行。

编辑:下面的代码做同样的事情,前提是你熟悉zip

correct_answers = ['A', 'C', 'A', 'B', 'D']
user_answers = ['B', 'A', 'C', 'B', 'D']

incorrect = 0
for answer_tuple in zip(correct_answers, user_answers):
    if answer_tuple[0] != answer_tuple[1]:
        incorrect += 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM