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]

我四处修补,但我只能想到一个“多线”解决方案。有人知道我如何以更 Pythonic 的方式找到索引吗?

4

2 回答 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]
于 2013-01-20T23:22:04.603 回答
2
[i for i, (a,b) in enumerate(zip(vec1,vec2)) if a==b]
于 2013-01-20T23:23:55.137 回答