迭代两个列表并按位置计算的python方法是什么?

时间:2016-08-21 23:40:30

标签: python

迭代两个列表和计算的Pythonic方法是什么?

a, b=[1,2,3], [4,5,6]
c=[]
for i in range(3):
    c.append(a[i]+b[i])
print(c)
[5,7,9]

c是否存在没有for循环的单行?

5 个答案:

答案 0 :(得分:9)

使用zip和列表理解:

[x+y for (x, y) in zip(a, b)]

答案 1 :(得分:8)

一种可能性:

a, b = [1, 2, 3], [4, 5, 6]
c = list(map(sum, zip(a,b)))

另一种选择(如果它总是只有两个列表):

c = [x + y for x, y in zip(a, b)]

或者可能是我最喜欢的,这相当于我的第一个例子但使用列表理解而不是map

c = [sum(numbers) for numbers in zip(a, b)]

概括为列表列表(而不是不同变量中固定数量的列表):

lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
c = [sum(numbers) for numbers in zip(*lists)]

答案 2 :(得分:4)

如果您经常这样做,您应该使用numpy

>>> import numpy as np
>>> a, b=[1,2,3], [4,5,6]
>>> c = np.array(a) + b
>>> c
array([5, 7, 9])

答案 3 :(得分:3)

zip是要走的路,但问题的实际标题建议enumerate

[x+b[i] for i, x in enumerate(a)]

如果您在计算中需要实际的位置(索引),这种事情会有所帮助。

答案 4 :(得分:0)

也许izip是更好的选择,它不会生成元组列表。

from itertools import izip

c = [x + y for x, y in izip(a, b)]