我目前一直在努力为以下列表理解问题找到一个很好的解决方案:
在两个列表中很容易找到具有相同索引的相等值,例如
>>> 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的方式找到索引?
答案 0 :(得分:7)
你很近,在这里使用enumerate()
。
enumerate()
返回一个元组,其中第一个元素是索引,第二个元素是从iterable中获取的数据。
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]
答案 1 :(得分:2)
[i for i, (a,b) in enumerate(zip(vec1,vec2)) if a==b]