0

リストのリストがあります。それを配列と呼びましょう:

array=[[1,2,3,4],[2,3,4,5],[1,3,4,5]]

最大数のリストを返すことができる必要があります。この場合、[2,3,4,5] と [1,3,4,5] を返す必要があります。

max(array) を実行すると、各リストの 0 番目の要素のみが参照されるため、2 が返されます。

これは基本的な問題であることはわかっていますが、各リストの最大値のインデックスを見つけて関連するリストを返す for ループを使用して 30 分間これを解決しようとしましたが、機能していないか、非常に非効率的です。

4

3 に答える 3

2
# take the maximum from each tuple
>>> m1 = map(lambda tup: max(tup), array)
# take the maximum of all maximums
>>> m = max(m1)
# choose only tuples that contains m
>>> [tup for tup in array if m in tup]
[[2, 3, 4, 5], [1, 3, 4, 5]]
于 2013-11-10T05:53:12.647 に答える
1

次のように、1 つの短い行で (極端なパフォーマンスで) 実行することもできます。

>>> import numpy as np
>>> a = np.asarray([[1,2,3,4],[2,3,4,5],[1,3,4,5]])

>>> a[np.nonzero(a==a.max())[0]]                    #really short

[[2 3 4 5]
 [1 3 4 5]]
于 2013-11-10T06:33:38.193 に答える