일부pythonic 코드

137712 단어
I'm pretty sure there should be a more Pythonic way of doing this - but I can't think of one: How can I merge a two-dimensional list into a one-dimensional list? Sort of like zip/map but with more than two iterators.
Example - I have the following list:
array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

I want to have
result = [12, 15, 18] # [1+4+7, 2+5+8, 3+6+9]
use:
[sum(a) for a in zip(*array)]
   
   
   
   
57 down vote

[sum(value) for value in zip(*array)] is pretty standard.

This might help you understand it:

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

The unary star is not an operator by itself. It unwraps array elements into arguments into function calls.
In [4]: zip(*array) Out[4]: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

zip() is a built-in function
In [5]: zip(*array)[0] Out[5]: (1, 4, 7)

each element for the list returned by zip is a set of numbers you want.
In [6]: sum(zip(*array)[0]) Out[6]: 12 In [7]: [sum(values) for values in zip(*array)] Out[7]: [12, 15, 18]

좋은 웹페이지 즐겨찾기