2012-07-17 68 views
11

我有一个列表的列表:如何在元素总和最大的列表中找到列表?

x = [[1,2,3], [4,5,6], [7,8,9], [2,2,0]] 

我想获得其其元素的总和是在列表中的最大列表。在这种情况下[7,8,9]

我宁愿有一个花式maplambda或列表理解方法比for/while/if循环。

问候

回答

24

max takes a key argument,有了它,你可以告诉最大值如何计算值在迭代的每个项目。 sum会做很好的位置:

max(x, key=sum) 

演示:

>>> x = [[1,2,3], [4,5,6], [7,8,9], [2,2,0]] 
>>> max(x, key=sum) 
[7, 8, 9] 

如果您需要使用您总结项目的不同的方法,你也可以指定自己的功能;这不限于Python的内置功能:

>>> def mymaxfunction(item): 
...  return sum(map(int, item)) 
... 
>>> max([['1', '2', '3'], ['7', '8', '9']], key=mymaxfunction) 
['7', '8', '9'] 
+0

打我吧:) +1虽然 – 2012-07-17 09:38:48

+0

@JonClements:这与* *我有再次查找关键字参数名称。 :-P – 2012-07-17 09:39:29

+0

完美:)我不知道它可能如此简单。 – alwbtc 2012-07-17 09:40:54

0

为了完整和@Martijn打我最优雅的答案 - 我就扔在选项key=参数在Python是可用之前(但如果你使用< 2.5 - 你应该升级),以及如何丑陋用它来为:

x = [[1,2,3], [4,5,6], [7,8,9], [2,2,0]] 
with_idx = ((sum(v), i) for i,v in enumerate(x)) 
print x[max(with_idx)[1]] 
相关问题