我坚持看似简单的问题:
我有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)]
有人可以帮我进步吗?
答案 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,那么安装另一个库的开销可能不值得。