在Python中合并/添加列表
我觉得应该有更符合Python风格的方法来做这个事情,但我想不出来:我该怎么把一个二维列表合并成一个一维列表呢?有点像zip或map,但这里有不止两个迭代器。
举个例子,我有以下这个列表:
array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
我想得到的是
result = [12, 15, 18] # [1+4+7, 2+5+8, 3+6+9]
到目前为止,我想到的办法是:
def add_list(array):
number_items = len(array[0])
result = [0] * number_items
for index in range(number_items):
for line in array:
result[index] += line[index]
return result
不过我觉得这个方法看起来不太优雅,也不太符合Python的风格。除了没有检查二维数组中的所有“行”是否长度相同,是否可以相加等等,还有没有更好的方法呢?
8 个回答
14
另一种方法:
map(sum, zip(*array))
63
[sum(value) for value in zip(*array)] 这个写法是很常见的。
这可能会帮助你理解:
In [1]: array=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
In [2]: array
Out[2]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
In [3]: *array
------------------------------------------------------------
File "<ipython console>", line 1
*array
^
<type 'exceptions.SyntaxError'>: invalid syntax
这里的单星号并不是一个独立的运算符。它的作用是把数组中的元素拆开,变成函数调用时的参数。
In [4]: zip(*array)
Out[4]: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
zip() 是一个内置函数。
In [5]: zip(*array)[0]
Out[5]: (1, 4, 7)
zip 返回的每个元素都是你想要的一组数字。
In [6]: sum(zip(*array)[0])
Out[6]: 12
In [7]: [sum(values) for values in zip(*array)]
Out[7]: [12, 15, 18]
71
这段代码是用来处理一些数据的。它的主要目的是从一个地方获取信息,然后对这些信息进行一些操作,最后把结果返回给你。
首先,代码会连接到一个数据库,数据库就像一个大仓库,里面存放着很多信息。接着,它会查询这个数据库,找出你需要的数据。查询的过程就像是在仓库里找东西,你需要告诉它你想要什么。
找到数据后,代码会对这些数据进行处理。处理的方式可能包括计算、过滤或者排序等。想象一下,你在整理一堆文件,把它们按顺序放好,这就是在处理数据。
最后,处理完的数据会被返回给你,这样你就可以使用这些信息了。返回数据的过程就像是把整理好的文件递给你,让你可以方便地查看。
总的来说,这段代码的工作流程就是:连接数据库 -> 查询数据 -> 处理数据 -> 返回结果。
[sum(a) for a in zip(*array)]