2

次のようなリストのタプルがあるとしましょう:

g = (['20', '10'], ['10', '74'])

次のように、各リストの最初の値に基づいて最大2つが必要です

max(g, key = ???the g[0] of each list.something that im clueless what to provide)

答えは ['20', '10'] でしょうか?ここで鍵となるのは何ですか?上記の回答によると。

別の例:

g = (['42', '50'], ['30', '4'])
ans: max(g, key=??) = ['42', '50']

PS: 最大とは、数値の最大値を意味します。

4

4 に答える 4

6

各項目の最初の要素を取得する callable を渡すだけです。使用するoperator.itemgetter()のが最も簡単です:

from operator import itemgetter

max(g, key=itemgetter(0))

ただし、辞書順でソートされたアイテムではなく整数値に対してテストする必要がある場合は、ラムダの方が適している可能性があります

max(g, key=lambda k: int(k[0]))

どちらが必要かは、異なる長さの数字を含む文字列の最大値が何になるかによって異なります。'4'より小さいですか、大きいですか'30'?

デモ:

>>> g = (['42', '50'], ['30', '4'])
>>> from operator import itemgetter
>>> max(g, key=itemgetter(0))
['42', '50']
>>> g = (['20', '10'], ['10', '74'])
>>> max(g, key=itemgetter(0))
['20', '10']

またはとの違いをitemgetter()示す:lambdaint()

>>> max((['30', '10'], ['4', '10']), key=lambda k: int(k[0]))
['30', '10']
>>> max((['30', '10'], ['4', '10']), key=itemgetter(0))
['4', '10']
于 2013-07-06T16:09:09.983 に答える
1

lambdaを使用して、比較に使用するアイテムを指定できます。

>>> g = (['20', '10'], ['10', '74'])
>>> max(g, key = lambda x:int(x[0]))  #use int() for conversion
['20', '10']

>>> g = (['42', '50'], ['30', '4'])
>>> max(g, key = lambda x:int(x[0]))
['42', '50']

を使用することもできますoperator.itemegtterが、この場合、項目が文字列形式であるため機能しません。

于 2013-07-06T16:10:09.293 に答える
0

数値を数値として保存する場合:

g = ([20, 10], [10, 74])
max(g)
于 2013-07-06T16:34:54.297 に答える