Python:你能一个元素一个元素地添加两个列表吗?

Python:你能一个元素一个元素地添加两个列表吗?,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))) 编辑: 我做了一些基本的测

您是否可以按如下所示逐个元素添加两个列表而不进行迭代?这行得通,但是呃。我想念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)))
编辑:

我做了一些基本的测试,压倒性的赢家是列表理解,如果输入数据以列表的形式开始,如果可以在操作之前以数组的形式开始,则是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我做了一个小计时赛,看看什么是真正最快的。太棒了!真的回答了我的问题!