你可以逐个元素地添加两个列表,而不是如下所示迭代它吗?这有效,但是呃。我想念matlab。
list1 = [3, 7, 3]
list2 = [4, 5, 6]
for x in range(0, len(list1)):
list1[x] = list1[x] + list2[x]
print (list1)
Output :
[7, 12, 9]
答案 0 :(得分:3)
不要错过Matlab :) numpy数组是典型的Matlab数组:
arr1 = np.array([3, 7, 3])
arr2 = np.array([4, 5, 6])
arr1 + arr2
给你你想要的东西。
如果你想坚持使用列表,你可以这样做:
list1 = [3, 7, 3]
list2 = [4, 5, 6]
[sum(x) for x in zip(list1, list2)]
在表演评论之后,特别是Patrick的比较,我自己做了一个比较,并证实numpy实际上是当前解决方案中最快的。然而,还有另一个解决方案,胜过numpy!我们来看看:
# Numpy:
timeit arr1 + arr2 # 1.67 µs per loop
# List comprehension:
timeit [sum(x) for x in zip(list1, list2)] # 2.59 µs per loop
timeit [(x+y) for x,y in zip(list1,list2)] # 1.72 µs per loop
# Map and Reduce-based (note that reduce is really overkill, I did it just for fun):
timeit map(sum, zip(list1, list2)) # 2.58 µs per loop
timeit map(lambda a, b: a + b , list1, list2) # 2.11 µs per loop
timeit [reduce((lambda x,y: x+y), e) for e in zip(list1,list2)] # 4.05 µs per loop
# And the winner:
from operator import add
timeit map(add, list1, list2) # 1.57 µs per loop
答案 1 :(得分:1)
zip
列表一起,sum
对
list(map(sum, zip(list1, list2)))
编辑:
我做了一些基本的测试,如果输入数据以列表形式开始,压倒性的获胜者是列表理解,如果你可以在操作之前将它作为数组,则numpy
def test1(list1, list2):
l=[]
for x in range(0, len(list1)):
l.append(list1[x] + list2[x])
return l
def test2(list1, list2):
return list(map(sum, zip(list1, list2)))
def test3(list1, list2):
return [x+y for x, y in zip(list1, list2)]
import numpy as np
def test4(list1, list2):
return np.array(list1) + np.array(list2)
def test5(list1, list2):
return list1 + list2
from timeit import timeit
print(timeit('test1(list1, list2)', setup='list1 = list(range(100)); list2 = list(range(100))', globals=globals()))
print(timeit('test2(list1, list2)', setup='list1 = list(range(100)); list2 = list(range(100))', globals=globals()))
print(timeit('test3(list1, list2)', setup='list1 = list(range(100)); list2 = list(range(100))', globals=globals()))
print(timeit('test4(list1, list2)', setup='list1 = list(range(100)); list2 = list(range(100))', globals=globals()))
print(timeit('test4(list1, list2)', setup='list1 = np.array(list(range(100))); list2 = np.array(list(range(100)))', globals=globals()))
print(timeit('test5(list1, list2)', setup='list1 = np.array(list(range(100))); list2 = np.array(list(range(100)))', globals=globals()))
给我
15.42712744511664 # append
17.329718918073922 # my solution above
7.0252319818828255 # list comprehension
16.53089915495366 # numpy with list inputs
1.430903600063175 # numpy with array inputs that are double checked
0.6451617309357971 # numpy assuming array inputs
这些是执行操作1000000次的秒数。
每次被迫np.array(list)
时,Numpy的速度都非常慢。
答案 2 :(得分:1)
如果您想要类似matlab的行为,则应使用numpy
In [5]: list1 = [3, 7, 3]
In [6]: list2 = [4, 5, 6]
In [7]: import numpy as np
In [8]: np.array(list1) + np.array(list2)
Out[8]: array([ 7, 12, 9]
答案 3 :(得分:1)
您还可以在列表
上使用列表理解list1 = [3, 7, 3]
list2 = [4, 5, 6]
list3 = [(x+y) for x,y in zip(list1,list2)]
print(list3)
输出:
[7, 12, 9]
答案 4 :(得分:1)
您可以使用 lambda 和地图:
>>> list1 = [3, 7, 3]
>>> list2 = [4, 5, 6]
>>> list(map(lambda a, b: a + b , list1, list2))
[7, 12, 9]