比较2个列表并将差异附加到第3个

时间:2013-11-25 04:07:22

标签: python list compare

我有一个问题,我不能为我的生活得到任何回报过去()

exam_solution = ['B', 'D', 'A', 'A', 'C', 'A', 'B', 'A', 'C', 'D', 'B', 'C',\
           'D', 'A', 'D', 'C', 'C', 'B', 'D', 'A']

student_answers = ['B', 'D', 'B', 'A', 'C', 'A', 'A', 'A', 'C', 'D', 'B', 'C',\
           'D', 'B', 'D', 'C', 'C', 'B', 'D', 'A']

我需要比较2个列表并将差异追加到questions_missed = [] 我没有找到任何远离工作的东西。任何帮助将不胜感激

编辑:在python中整天都在调整它。

7 个答案:

答案 0 :(得分:1)

使用python list comprehensions检查列表diff:

print [(index, i, j) for index, (i, j) in enumerate(zip(exam_solution, student_answers)) if i != j]
[(2, 'A', 'B'), (6, 'B', 'A'), (13, 'A', 'B')]

答案 1 :(得分:0)

您可以修改此解决方案以满足您的需求:

exam_solution = ['B', 'D', 'A', 'A', 'C', 'A', 'B', 'A', 'C', 'D', 'B', 'C', 'D', 'A', 'D', 'C', 'C', 'B', 'D', 'A']
student_answers = ['B', 'D', 'B', 'A', 'C', 'A', 'A', 'A', 'C', 'D', 'B', 'C', 'D', 'B', 'D', 'C', 'C', 'B', 'D', 'A']

results = []

correct = 0
incorrect = 0

index = 0
while index < len(student_answers):
    if student_answers[index] == exam_solution[index]:
        results.append(True)
        correct += 1
    else:
        results.append(False)
        incorrect += 1

    index += 1

print("You answered " + correct + " questions correctly and " + incorrect + " questions incorrectly.")

答案 2 :(得分:0)

使用列表推导:

[x for i, x in enumerate(exam_solution) if exam_solution[i] != student_answers[i] ]

['A','B','A']

答案 3 :(得分:0)

假设你想要一个像这样的普通英语输出 -

Question 3 A != B
Question 7 B != A
Question 14 A != B

你可以试试 -

from array import *

exam_solution = ['B', 'D', 'A', 'A', 'C', 'A', 'B', 'A', 'C', 'D', 'B', 'C',\
       'D', 'A', 'D', 'C', 'C', 'B', 'D', 'A']
student_answers = ['B', 'D', 'B', 'A', 'C', 'A', 'A', 'A', 'C', 'D', 'B', 'C',\
       'D', 'B', 'D', 'C', 'C', 'B', 'D', 'A']
questions_missed = []
count = 0
for answer in exam_solution:
    if (answer != student_answers[count]):
            questions_missed.append(count)
    count = count + 1

for question in questions_missed:
    print str.format("Question {0} {1} != {2}", question+1,
            exam_solution[question], student_answers[question]);

答案 4 :(得分:0)

使用KISS设计原则,我就是这样做的:

exam_solution = ['B', 'D', 'A', 'A', 'C', 'A', 'B', 'A', 'C', 'D', 'B', 'C',\
       'D', 'A', 'D', 'C', 'C', 'B', 'D', 'A']

student_answers = ['B', 'D', 'B', 'A', 'C', 'A', 'A', 'A', 'C', 'D', 'B', 'C',\
       'D', 'B', 'D', 'C', 'C', 'B', 'D', 'A']

questions_missed = []

for index in range(len(exam_solution)):
    # this assumes exam_solution and student_answers have the same size!
    if exam_solution[index] != student_answers[index]:
        questions_missed.append(index)

print (questions_missed)

输出是:

[2, 6, 13]

答案 5 :(得分:0)

L = [(a, b) for a, b in zip(exam_solution, student_answers) if a != b]
print(L)

也许您可以使用zip功能。

输出是: [('A', 'B'), ('B', 'A'), ('A', 'B')]

答案 6 :(得分:0)

解决方案(使用set):

>>> def result(solution, answers):
...     return set(str(n)+s for n, s in enumerate(solution)) - \ 
...            set(str(n)+r for n, r in enumerate(answers))
...
>>> result(exam_solution, student_answers)
... set(['6B', '13A', '2A'])
>>>

结果是错误的回复(您可以转换为列表list(result(student_answers))

相关问题