如何正确比较两个列表中相同索引位置的对应元素?
正确实现同索引列表项对比的方法
你的原代码问题在于嵌套循环会将用户输入的每个元素与原列表的所有元素逐一对比,而不是对应索引位置的元素,因此会输出大量重复结果,无法满足需求。以下是几种正确的实现方式:
方法1:使用enumerate获取索引匹配
通过enumerate遍历用户输入列表时同时拿到索引,再用索引取原列表对应位置的元素进行对比:
word = ['red', 'orange', 'blue', 'white'] answer_user = ['black', 'orange', 'blue', 'green'] for idx, user_item in enumerate(answer_user): original_item = word[idx] print('good answer' if user_item == original_item else 'bad answer')
方法2:使用zip直接配对对应元素
zip会将两个列表的对应位置元素打包成元组,直接遍历配对后的元素即可对比:
word = ['red', 'orange', 'blue', 'white'] answer_user = ['black', 'orange', 'blue', 'green'] for original, user in zip(word, answer_user): print('good answer' if user == original else 'bad answer')
处理列表长度不一致的情况
如果两个列表长度可能不同,可使用itertools.zip_longest,它会以较长列表的长度为准,缺失的元素用指定值填充(这里用None):
from itertools import zip_longest word = ['red', 'orange', 'blue', 'white', 'yellow'] answer_user = ['black', 'orange', 'blue', 'green'] for original, user in zip_longest(word, answer_user, fillvalue=None): print('good answer' if user == original else 'bad answer')
内容的提问来源于stack exchange,提问作者Luc78
相关产品推荐
相关产品推荐

