2014-02-16 277 views
1

在Python中,我們有一個列表的列表。例如:Python:運行列表中每個第n個元素的函數

a1 = [[1,4,3,5,6],[6,7,5,3,12],[1,6,4,1,2],[1,9,4,2,1]] 

a2 = [[4,3,5,6],[6,7,5,12],[1,6,4,2],[1,9,2,1],[3,2,5,11]] 

a長度和內部列表的長度可以變化。但是所有內部列表總是具有相同的長度。

我想應用一些函數到由每個列表的第n個元素組成的所有列表。

考慮到a2例如,我想迭代地應用列表[4,6,1,1,3](第一個元素列表),然後到列表[3,7,6, 9,2](第二個元素的列表),等...

想法類似的功能:

map(a2, my_function) 

除了創建my_function不應被施加到每個內部列表,但是到的N-每個列表th元素。

希望有道理!

什麼是執行這種事情最pythonic方式?

+0

怎麼樣在一個lambda嵌套地圖? 'map(lambda x:map(dostuff,x),your_list)' – Netwave

回答

6

使用zip* operator

>>> a1 = [[1,4,3,5,6],[6,7,5,3,12],[1,6,4,1,2],[1,9,4,2,1]] 
>>> a2 = [[4,3,5,6],[6,7,5,12],[1,6,4,2],[1,9,2,1],[3,2,5,11]] 

>>> zip(*a1) 
[(1, 6, 1, 1), (4, 7, 6, 9), (3, 5, 4, 4), (5, 3, 1, 2), (6, 12, 2, 1)] 
>>> zip(*a2) 
[(4, 6, 1, 1, 3), (3, 7, 6, 9, 2), (5, 5, 4, 2, 5), (6, 12, 2, 1, 11)] 

>>> map(sum, zip(*a1)) # [1+6+1+1, 4+7+6+9, ...] 
[9, 26, 16, 11, 21] 
+0

非常感謝!請給我一個關於*運算符如何在函數zip中使用的解釋? –

+0

@ Remi.b,'zip(* [[1,2],[3,4]])'相當於zip([1,2],[3,4])'。 '*'不特定於'zip'函數。如果你按照答案中的鏈接,有更多的善意解釋。 – falsetru

+0

我沒有意識到你添加了鏈接。謝謝! –

相關問題