迭代两个列表和计算的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循环的单行?
答案 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)]