我现在有:

list1 = [1, 2, 3]
list2 = [4, 5, 6]

我希望有:

[1, 2, 3]
 +  +  +
[4, 5, 6]
|| || ||
[5, 7, 9]

仅仅是两个列表的元素相加。

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

最python化的方式是什么?


当前回答

这将适用于2个或更多的列表;遍历列表的列表,但使用numpy加法处理每个列表的元素

import numpy as np
list1=[1, 2, 3]
list2=[4, 5, 6]

lists = [list1, list2]
list_sum = np.zeros(len(list1))
for i in lists:
   list_sum += i
list_sum = list_sum.tolist()    

[5.0, 7.0, 9.0]

其他回答

这将适用于2个或更多的列表;遍历列表的列表,但使用numpy加法处理每个列表的元素

import numpy as np
list1=[1, 2, 3]
list2=[4, 5, 6]

lists = [list1, list2]
list_sum = np.zeros(len(list1))
for i in lists:
   list_sum += i
list_sum = list_sum.tolist()    

[5.0, 7.0, 9.0]

虽然,实际的问题并不想遍历列表来生成结果,但是所提出的所有解决方案实际上都是这样做的!

要刷新:如果不查看所有向量元素,就不能将两个向量相加。因此,大多数解的算法复杂度都是大o (n)。其中n是向量的维数。

因此,从算法的角度来看,使用for循环迭代生成结果列表是合乎逻辑的,也是python化的。但是,除此之外,该方法没有调用或导入任何附加库的开销。

# Assumption: The lists are of equal length.
resultList = [list1[i] + list2[i] for i in range(len(list1))]

这里显示/讨论的时间取决于系统和实现,不能作为衡量操作效率的可靠措施。在任何情况下,向量加法运算的大O复杂度是线性的,即O(n)。

在我看来,使用numpy更简单:

import numpy as np
list1=[1,2,3]
list2=[4,5,6]
np.add(list1,list2)

结果:

有关详细参数信息,请查看这里:numpy.add

[a + b for a, b in zip(list1, list2)]

使用numpy.add()就很简单了

import numpy

list1 = numpy.array([1, 2, 3])
list2 = numpy.array([4, 5, 6])
result = numpy.add(list1, list2) # result receive element-wise addition of list1 and list2
print(result)
array([5, 7, 9])

请参阅这里的医生

如果你想接收一个python列表:

result.tolist()