gpt4 book ai didi

python - 概括添加嵌套列表

转载 作者:太空狗 更新时间:2023-10-29 20:19:46 25 4
gpt4 key购买 nike

给定 3 个嵌套向量:

 >>> a
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> b
[[10, 20, 30], [40, 50, 60], [70, 80, 90]]
>>> c
[[100, 200, 300], [400, 500, 600], [700, 800, 900]]

我可以像这样将这些向量与 map/sum/zip 理解相加:

>>> [map(sum,zip(i,j,k)) for i,j,k in zip(a,b,c)]
[[111, 222, 333], [444, 555, 666], [777, 888, 999]]

我已经通过将两个列表加在一起手动扩展了它,但是是否有一种 pythonic 方法可以将其概括为处理任意数量的列表?

(最好是 Python 2.7,不使用外部库)

最佳答案

这是一个通用的方法:

from itertools import izip
def multiple_sum(*args):
return [map(sum, izip(*items)) for items in izip(*args)]

演示:

In [13]: multiple_sum(a, b, c)
Out[13]: [[111, 222, 333], [444, 555, 666], [777, 888, 999]]

请注意,由于在 Python 2.7 中 zip 返回一个列表,所以当您只想迭代结果时最好使用它,而不是使用返回的 itertools.izip一个迭代器。

这是使用 itertools.starmap() 的另一种方法,它比以前的方法更快:

def multiple_sum(*args):
return [map(sum, lst) for lst in starmap(zip, zip(*args))]

基准:

In [32]: %timeit [map(sum, izip(*items)) for items in izip(a, b, c)]
100000 loops, best of 3: 3.93 µs per loop

In [33]: %timeit [map(sum, lst) for lst in starmap(zip, zip(a, b , c))]
100000 loops, best of 3: 3.01 µs per loop

关于python - 概括添加嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40512495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com