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 说服我 post 这个超高效的解决方案:
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
所以我有两个列表,我将一个人的答案与正确答案进行比较:
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 说服我 post 这个超高效的解决方案:
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