python - 两个列表对应元素相同的索引列表

标签 python python-3.x string list enumerate

我想比较两个不同的列表并返回相似字符串的索引。

例如,如果我有两个列表:

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/

相关文章:

python - Theano 步骤给出 File in wrong format 错误

python - 来自 python selenium 脚本的回溯错误(间歇性工作)

未找到 Python 模块,但已安装且在搜索路径中

python - 用 python 正则表达式从旧字符串计算出的新字符串替换子字符串

java - 如何使我的字符串比较不区分大小写?

python - Linux:Conda 无法安装 Anaconda

python - 将 list.map 应用于 python 中的两个并行列表

php - 如何以纯文本形式提取网页上的所有 URL(链接)?

python - 如何获取两个日期之间的日期

java - 如果键为空,则从 HashMap 中删除元素