首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >2个列表的元素相加?

2个列表的元素相加?
EN

Stack Overflow用户
提问于 2013-09-10 15:49:11
回答 16查看 344K关注 0票数 305

我现在有了:

代码语言:javascript
复制
list1 = [1, 2, 3]
list2 = [4, 5, 6]

我希望:

代码语言:javascript
复制
[1, 2, 3]
 +  +  +
[4, 5, 6]
|| || ||
[5, 7, 9]

简单地按元素添加两个列表。

我当然可以迭代这两个列表,但我不想这样做。

什么是最具Pythonic风格的方式呢?

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2013-09-10 15:50:36

operator.add中使用map

代码语言:javascript
复制
>>> from operator import add
>>> list( map(add, list1, list2) )
[5, 7, 9]

或者使用列表理解的zip

代码语言:javascript
复制
>>> [sum(x) for x in zip(list1, list2)]
[5, 7, 9]

时序比较:

代码语言:javascript
复制
>>> list2 = [4, 5, 6]*10**5
>>> list1 = [1, 2, 3]*10**5
>>> %timeit from operator import add;map(add, list1, list2)
10 loops, best of 3: 44.6 ms per loop
>>> %timeit from itertools import izip; [a + b for a, b in izip(list1, list2)]
10 loops, best of 3: 71 ms per loop
>>> %timeit [a + b for a, b in zip(list1, list2)]
10 loops, best of 3: 112 ms per loop
>>> %timeit from itertools import izip;[sum(x) for x in izip(list1, list2)]
1 loops, best of 3: 139 ms per loop
>>> %timeit [sum(x) for x in zip(list1, list2)]
1 loops, best of 3: 177 ms per loop
票数 428
EN

Stack Overflow用户

发布于 2013-09-10 15:59:12

其他人给出了如何在纯python中完成此操作的示例。如果想要对包含100.000个元素的数组执行此操作,则应使用numpy:

代码语言:javascript
复制
In [1]: import numpy as np
In [2]: vector1 = np.array([1, 2, 3])
In [3]: vector2 = np.array([4, 5, 6])

现在,按元素进行加法就像

代码语言:javascript
复制
In [4]: sum_vector = vector1 + vector2
In [5]: print sum_vector
[5 7 9]

就像在Matlab中一样。

与Ashwini的最快版本进行比较的时间:

代码语言:javascript
复制
In [16]: from operator import add
In [17]: n = 10**5
In [18]: vector2 = np.tile([4,5,6], n)
In [19]: vector1 = np.tile([1,2,3], n)
In [20]: list1 = [1,2,3]*n
In [21]: list2 = [4,5,6]*n
In [22]: timeit map(add, list1, list2)
10 loops, best of 3: 26.9 ms per loop

In [23]: timeit vector1 + vector2
1000 loops, best of 3: 1.06 ms per loop

所以这比原来快了25倍!但是使用适合你的情况。对于一个简单的程序,您可能不想安装numpy,所以请使用标准的python (我发现Henry's version是最具python风格的)。如果您正在进行严重的数字运算,那么让numpy来做繁重的工作。对于速度狂人来说:从n = 8开始,numpy解决方案似乎更快。

票数 119
EN

Stack Overflow用户

发布于 2013-09-10 15:51:57

代码语言:javascript
复制
[a + b for a, b in zip(list1, list2)]
票数 69
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18713321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档