2014-02-16 288 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

我没有意识到你添加了链接。谢谢! –

相关问题