簡體   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