我想比较两个不同的列表并返回相似字符串的索引。
例如,如果我有两个列表:
grades = ['A', 'B', 'A', 'E', 'D']
scored = ['A', 'B', 'F', 'F', 'D']
我的预期输出是:
[0, 1, 4] #The indexes of similar strings in both lists
然而这是我现在得到的结果:
[0, 1, 2, 4] #Problem: The 2nd index being counted again
我尝试过使用两种方法进行编码。
第一种方法:
def markGrades(grades, scored):
indices = [i for i, item in enumerate(grades) if item in scored]
return indices
第二种方法:
def markGrades(grades, scored):
indices = []
for i, item in enumerate(grades):
if i in scored and i not in indices:
indices.append(i)
return indices
第二种方法返回正确的字符串而不是索引。
最佳答案
您可以使用 enumerate
连同 zip
在列表理解中实现这一点:
>>> grades = ['A', 'B', 'A', 'E', 'D']
>>> scored = ['A', 'B', 'F', 'F', 'D']
>>> [i for i, (g, s) in enumerate(zip(grades, scored)) if g==s]
[0, 1, 4]
您的代码的问题是您没有比较同一索引处的元素。相反,通过使用 in
,您正在检查一个列表的元素是否存在于另一个列表中。
因为 'A'
位于 grades
的索引 2
出现在 scored
列表中。您在结果列表中获得索引 2
。
关于python - 两个列表对应元素相同的索引列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67324974/