说我有3个列表
x1 = [1, 2, 3, 4]
x2 = [2, 3, 4, 5]
x3 = [3, 4, 5, 6]
我想根据索引减少这个列表列表。
我们可以通过总结元素来减少这一点: - x1[i] + x2[i] + x3[i]
out = [6, 9, 12, 15]
或乘以: - x1[i] * x2[i] * x3[i]
out = [6, 24, 60, 120]
python中实现此目的的最佳方法是什么?
编辑:
有没有办法为列表列表执行此操作?
答案 0 :(得分:7)
您可以使用zip
和sum
功能。
out = [sum(i) for i in zip(x1, x2, x3)]
对于乘法,您可以使用reduce
(对于Python 2)
out = [reduce(lambda a, b: a * b, i) for i in zip(x1, x2, x3)]
您可以在Python 3中从reduce
获取functools
。
但是,您也可以定义自己的乘法函数,然后在列表推导中使用该函数。
def mult(lst):
mul = 1
for i in lst:
mul *= i
return mul
out = [mult(i) for i in zip(x1, x2, x3)]
如果您有一个列表lst = [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]
,那么您需要做的就是将zip(x1, x2, x3)
替换为zip(*lst)
。 *
运算符基本上解包列表的元素,并将它们作为单独的参数提供给函数。
例如:
out = [sum(i) for i in zip(*lst)]
答案 1 :(得分:2)
使用zip(*data)
:
data = [
[1, 2, 3, 4],
[2, 3, 4, 5],
[3, 4, 5, 6]
]
print [sum(col) for col in zip(*data)]
import operator
def product(data):
return reduce(operator.mul, data)
print [product(col) for col in zip(*data)]
如果你想用非常大的数据计算,我建议你使用NumPy:
import numpy as np
print np.sum(data, axis=0)
print np.product(data, axis=0)