同时枚举两个Python列表的方法是什么?

107

我该如何同时枚举两个等长的列表? 我相信一定有更pythonic的方法来完成以下操作:

for index, value1 in enumerate(data1):
    print index, value1 + data2[index]
我想在for循环中使用索引、data1[index]和data2[index]。
6个回答

220

在Python 2和Python 3中都可以使用zip函数:

for index, (value1, value2) in enumerate(zip(data1, data2)):
    print(index, value1 + value2)  # for Python 2 use: `print index, value1 + value2` (no braces)

请注意,zip仅运行到两个列表中较短的一个(对于长度相等的列表不是问题),但是,如果你想遍历整个列表,并且列表长度不相等,则可以使用itertools.izip_longest


2
谢谢,这个解决了 zip(data1, data2).index(val1, val2) - Chebhou

17
for i, (x, y) in enumerate(zip(data1, data2)):
在Python 2.x中,当你处理非常长的列表时,你可能会想要使用itertools.izip代替zip

17
还有别人讨厌 enumerate 这个单词太长了吗? - Steven Rumbalski
1
@jamylak:没错,所以也许它应该被命名为 enu ;) - Fred Foo
1
@larsmans 是的,那会与 zipmap 很搭!应该提出 Python 4 的请求 ;) ;) - jamylak
1
@jamylak:别忘了同时请求 rangerng,以便更有力地证明。哦,还有 rpr - Fred Foo
4
重点是易读性!虽然考虑过使用enum(),但被否决了:PEP 279 - Quant Metropolis
显示剩余4条评论

11

2
尽管您要寻找什么还不是很清楚,
>>> data1 = [3,4,5,7]
>>> data2 = [4,6,8,9]
>>> for index, value in enumerate(zip(data1, data2)):
    print index, value[0]+value[1]


0 7
1 10
2 13
3 16

1

既然已经提到长度相等,

for l in range(0, len(a)):
   print a[l], b[l]

0
假设您想要使用 zip
   >>> for x in zip([1,2], [3,4]):
    ...     print x
    ... 
    (1, 3)
    (2, 4)

2
索引也需要在循环内部。 - Quant Metropolis

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