Python 将用户输入列表与集合列表按重复顺序进行比较

Python 将用户输入列表与集合列表按重复顺序进行比较,python,list,duplicates,compare,Python,List,Duplicates,Compare,我试图以特定的顺序(如多项选择题)获取一组答案“a”、“B”、“C”或“D”,并让用户输入他的答案。之后,我希望它创建第三个列表,并打印出什么是对的和错的。这是我到目前为止所拥有的 userAnswersList = [] correctAnswers = ['A', 'C', 'A', 'A', 'D', 'B', 'C', 'A', 'C', 'B', 'A', 'D', 'C', 'A', 'D', 'C', 'B', 'B', 'D', 'A'] while len(userAn

我试图以特定的顺序(如多项选择题)获取一组答案“a”、“B”、“C”或“D”,并让用户输入他的答案。之后,我希望它创建第三个列表,并打印出什么是对的和错的。这是我到目前为止所拥有的

 userAnswersList = []
 correctAnswers = ['A', 'C', 'A', 'A', 'D', 'B', 'C', 'A', 'C', 'B', 'A', 'D', 'C', 'A', 'D', 'C', 'B', 'B', 'D', 'A']

 while len(userAnswersList) <= 19:
     userAnswers = input('Give me each answer total of 20 questions I\'ll let  you know how many you missed.')
     userAnswersList.append(userAnswers.upper())

correctedList = []
for i in userAnswersList:
    if i in correctAnswers:
        correctedList.append(i)
    else:
        correctedList.append('XX')

print(correctedList)
userAnswersList=[]
correctAnswers=['A','C','A','D','B','C','B','A','D','C','A','D','C','B','B','D','A']

而len(userAnswersList)这里没有问题,所以我假设你在问你所拥有的东西有什么问题

比较部分在两个列表中使用相同的变量i,但即使它不同,也不起作用

您将需要以下内容:

for i in range(len(correctAnswers)):
    correctedList.append(correctAnswers[i] if userAnswersList[i] == correctAnswers[i] else 'XX')
而不是使用:

for i in userAnswersList:
您可能会发现遍历数组并检查值是否相等更容易,例如:

for i in range(len(userAnswersList)):
    if userAnswersList[i] == correctAnswers[i]:
        correctedList.append(userAnswersList[i])
    else:
        correctedList.append('XX')

这可以使用Python的map方法来完成

如地图帮助中所述:

map(...)
    map(function, sequence[, sequence, ...]) -> list

    Return a list of the results of applying the function to the items of
    the argument sequence(s).  If more than one sequence is given, the
    function is called with an argument list consisting of the corresponding
    item of each sequence, substituting None for missing values when not all
    sequences have the same length.  If the function is None, return a list of
    the items of the sequence (or a list of tuples if more than one sequence).
因此,在这种情况下,您需要比较两个相等列表中的每一项,并对它们应用一个条件。我们将介绍的条件将遵循以下逻辑:

如果一个列表中的内容与另一个列表中的内容不相等,请设置“XX”,否则返回值

因此,我们将在这里引入所谓的“lambda”函数,以满足上述条件。以下是关于什么是lambda的文档:

所以,当我们把这些放在一起时,我们有:

d = map(lambda x, y: 'XX' if x != y else y, userAnswersList, correctAnswers)
演示:

correctAnswers = ['A', 'C', 'A', 'A', 'D', 'B', 'C', 'A', 'C', 'B', 'A', 'D', 'C', 'A', 'D', 'C', 'B', 'B', 'D', 'A']

结果:

['A', 'C', 'A', 'XX', 'D', 'B', 'C', 'A', 'XX', 'B', 'A', 'XX', 'C', 'A', 'D', 'C', 'XX', 'XX', 'D', 'XX']
您可以将这两个列表放在一起,并检查常用索引处的元素,您可以使用列表理解功能将while替换为:


如果每个列表中的对应元素相同,我们添加字母,如果不相同,我们添加
“XX”
以标记错误答案。

搜索枚举列表,然后使用userAnswersList中的索引将结果与此索引处的正确答案进行比较映射是否也适用?我只是利用map整合了一个解决方案。我很想知道你对它的看法。@idjaw,它会起作用,但我认为zip是一种惯用的方法。
userAnswersList = ['A', 'C', 'A', 'B', 'D', 'B', 'C', 'A', 'A', 'B', 'A', 'C', 'C', 'A', 'D', 'C', 'D', 'C', 'D', 'B']
['A', 'C', 'A', 'XX', 'D', 'B', 'C', 'A', 'XX', 'B', 'A', 'XX', 'C', 'A', 'D', 'C', 'XX', 'XX', 'D', 'XX']
userAnswersList = [input('Give me each answer total of 20 questions I\'ll let  you know how many you missed.').upper() 
                   for _ in range(20)]
correctAnswers = ['A', 'C', 'A', 'A', 'D', 'B', 'C', 'A', 'C', 'B', 'A', 'D', 'C', 'A', 'D', 'C', 'B', 'B', 'D', 'A']

correctedList = ["XX" if u_a != c_a else u_a for u_a, c_a in zip(userAnswersList)]