10

私はリストのリストを持っています:

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

その要素の合計がリストの中で最大であるリストを取得したいと思います。この場合[7,8,9]

ループよりも、派手なmap、またはlambdaリスト内包法が欲しいです。for/while/if

よろしくお願いします

4

3 に答える 3

24

maxキー引数を取ります。これを使用すると、反復可能オブジェクト内の各アイテムの値を計算する方法をmaxに指示できます。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']
于 2012-07-17T09:37:50.857 に答える
0

完全を期すために、そして@Martijnが私を最もエレガントな答えに打ち負かしたので、パラメーターがPythonで利用可能になる前にオプションを投入します(ただし、<2.5を使用key=している場合は、実際にアップグレードする必要があります)なれ:

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]]
于 2012-07-17T09:47:18.747 に答える
0
num = [[1, 2, 3], [4, 5, 6], [10, 11, 12], [7, 8, 9]]
 
index = 0
max_index = 0
sum_max = 0
for list in num:
>>>>sum_list = 0
>>>>for x in list:
>>>>>>>>sum_list += x
>>>>if sum_list > sum_max:
>>>>>>>>sum_max = sum_list
>>>>>>>>max_index = index
>>>>index += 1
print(num[max_index])`enter code here`
于 2021-07-02T14:39:06.380 に答える