列表和列表列表中值之间的数学运算(python3)

时间:2017-03-01 10:22:59

标签: list python-3.x list-comprehension

我坚持看似简单的问题:

我有2个列表,让我们说:

a = [[1], [2]]
b = [[1, 2, 3], [4, 5, 6]]

我想要这个结果:

result = [[2, 3, 4], [6, 7, 8]]

通过向[0]的每个值添加(或者,为什么不,减去)[0]值,然后将[1]添加到b [1]等... 我尝试使用zip而没有按预期结果:

result = [x for x in zip(a, b)]

有人可以帮我进步吗?

2 个答案:

答案 0 :(得分:1)

您有一个包含1个元素的列表列表,并且您希望在另一个列表的所有元素上应用该元素的添加。由于预期结果是列表列表,因此您必须创建双列表解析,如下所示:

a = [[1], [2]]
b = [[1, 2, 3], [4, 5, 6]]

result = [[x+v for x in l] for [v],l in zip(a,b)]

print(result)

结果:

[[2, 3, 4], [6, 7, 8]]

for [v],l是一种在列表中解压缩元素的简洁方法,因此它避免了循环中的x+v[0],并且性能更高(和pythonic)。另外:如果列表突然包含多于1个元素,您将收到解包错误而不是意外结果(通过忽略其他元素)。

答案 1 :(得分:1)

你可以使用numpy来做到这一点,numpy固有地支持这样的数组操作:

>>> import numpy as np
>>> i = np.array([[1], [2]])
>>> j = np.array([[1, 2, 3], [4, 5, 6]])
>>> i+j
array([[2, 3, 4],
       [6, 7, 8]])

如果你的列表很大,由于numpy使用快速的低级例程来处理这类内容,这可能比列表推导更具速度优势。

如果没有,并且你还没有安装numpy,那么安装另一个库的开销可能不值得。