Python:你能一个元素一个元素地添加两个列表吗?
您是否可以按如下所示逐个元素添加两个列表而不进行迭代?这行得通,但是呃。我想念matlabPython:你能一个元素一个元素地添加两个列表吗?,python,list,Python,List,您是否可以按如下所示逐个元素添加两个列表而不进行迭代?这行得通,但是呃。我想念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] 将列表压缩在一起,然后对其求和 list(map(sum, zip(list1, list2))) 编辑: 我做了一些基本的测
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]
将列表压缩在一起,然后对其求和
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.arraylist时,Numpy的速度惊人地慢
您可以自己尝试一下,将列表压缩在一起,然后将两个列表相加
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.arraylist时,Numpy的速度惊人地慢
在上自己尝试一下,如果你想要类似matlab的行为,你应该使用numpy
如果您想要类似matlab的行为,应该使用numpy
您还可以在两个列表上使用列表理解
list1 = [3, 7, 3]
list2 = [4, 5, 6]
list3 = [(x+y) for x,y in zip(list1,list2)]
print(list3)
输出:
[7, 12, 9]
您还可以在两个列表上使用列表理解
list1 = [3, 7, 3]
list2 = [4, 5, 6]
list3 = [(x+y) for x,y in zip(list1,list2)]
print(list3)
输出:
[7, 12, 9]
千万不要错过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
千万不要错过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
您可以使用lambda和地图:
您可以使用lambda和地图:
我想念matlab。使用numpy然后。。。顺便说一句,所有的方法都会在你的列表中迭代,问题是它是否隐藏在引擎盖下…是的,但有些方法是优化的,因为它们执行了很多。这是我想问的更多。我想念matlab。使用numpy然后。。。顺便说一句,所有的方法都会在你的列表中迭代,问题是它是否隐藏在引擎盖下…是的,但有些方法是优化的,因为它们执行了很多。这是我想问的更多。这会比for循环更有效吗?我认为最有效的方法是使用numpy。看看法提赫的答案。@zippo我做了一个小计时赛,看看什么是真正最快的。太棒了!真的回答了我的问题!这会比for循环更有效吗?我认为最有效的方法是使用numpy。看看法提赫的答案。@zippo我做了一个小计时赛,看看什么是真正最快的。太棒了!真的回答了我的问题!