2012-07-17 3 views
11

私はリストのリストを持っている:要素の合計が最大であるリストのリストでリストを見つける方法を教えてください。

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

私はその総和その要素のリストの中で最大であるリストを取得したいです。この場合[7,8,9]

私はむしろfor/while/ifループよりも空想mapまたはlambdaやリストの内包方法を持っていると思います。あなたが反復可能で、各項目の値を計算する方法を最大に伝えることができ、それに

よろしく

答えて

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] 

を、あなたのアイテムを合計するさまざまな方法を使用する必要がある場合、あなたはあまりにも独自の関数を指定することができます。完全のために

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

はそれを私にビート:) 1 –

+0

しかし@JonClementsをキーワード引数名​​を再度検索します。 :-P –

+0

パーフェクト:)私はそれがとても簡単かもしれないということは知らなかった。 – alwbtc

0

と@Martijnが最もエレガントな答えに私を打つよう - key=パラメータはPythonで利用できた前に私は(オプションでスローされます:これは組み込み関数の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]] 
関連する問題