Python:生成列表,它是两个列表的总和,以项目方式

use*_*100 7 python list-comprehension list

说我有两个清单:

a=[1,2,3,4,5]
b=[5,4,3,2,1]
Run Code Online (Sandbox Code Playgroud)

我想创建第三个,它将是两个线性和:

c[i]==a[i]+b[i]
c==[6,6,6,6,6]
Run Code Online (Sandbox Code Playgroud)

是否可以使用'for'构造函数?喜欢:

c = [aa+bb for aa in a for bb in b]
Run Code Online (Sandbox Code Playgroud)

(这显然不是我想要的)

Ash*_*ary 24

用途zip():

>>> a = [1,2,3,4,5]
>>> b = [5,4,3,2,1]
>>> c = [x+y for x,y in zip(a, b)]
>>> c
[6, 6, 6, 6, 6]
Run Code Online (Sandbox Code Playgroud)

要么:

>>> c = [a[i] + b[i] for i in range(len(a))]
>>> c
[6, 6, 6, 6, 6]
Run Code Online (Sandbox Code Playgroud)

c = [aa+bb for aa in a for bb in b] 是这样的:

 for aa in a:
     for bb in b:
           aa+bb
Run Code Online (Sandbox Code Playgroud)

这意味着,选择1a通过的所有元素,然后循环b,同时将其添加到1,然后选择2a再次通过的所有值,然后循环b,同时将它们添加到2,这就是为什么你并没有获得预期的输出.

  • 做了一些“ timeit”操作,并且在测试了该站点上的所有解决方案之后,最快的是“ starmap(add,zip(a,b))”,时钟为0.65s。上述解决方案分别为1.18s和0.94s。 (2认同)

小智 5

a=[1,2,3,4,5]
b=[5,4,3,2,1]

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

OR

map(lambda x,y:x+y, a, b)
[6, 6, 6, 6, 6]
Run Code Online (Sandbox Code Playgroud)

  • +1 表示具有多个序列的 `map()`,它隐式地执行 `izip_longest`。 (2认同)