2012-07-17 117 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]] 
相關問題