如何在两个列表中找到匹配项的索引

4

我目前在尝试寻找以下列表推导问题的解决方案,但还没有头绪:

在两个列表中查找相同索引处的相等值很容易,例如:

>>> vec1 = [3,2,1,4,5,6,7]
>>> vec2 = [1,2,3,3,5,6,9]
>>> [a for a, b in zip(vec1, vec2) if a == b]
[2,5,6]

然而,我只需要列表中匹配项出现的索引,而不是值本身。使用上面的例子,我想要的输出是:[1,4,5]

我试着研究了一下,但我只想到了一个“多行”解决方案。有人知道我怎样能用更Python风格的方法找到这些索引吗?


你打算如何处理这些索引? - Karl Knechtel
@KarlKnechtel:好问题。您是数学家吗? - Excalibur
2个回答

7
你很接近了,这里需要使用enumerate()enumerate()返回一个元组,第一个元素是索引,第二个元素是从可迭代对象中获取的数据。
In [169]: vec1 = [3,2,1,4,5,6,7]

In [170]: vec2 = [1,2,3,3,5,6,9]

In [171]: [i for i,(a, b) in enumerate(zip(vec1, vec2)) if a == b]
Out[171]: [1, 4, 5]

2
[i for i, (a,b) in enumerate(zip(vec1,vec2)) if a==b]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接