Python:使用键在元组中最多包含2个或更多元素的列表

use*_*820 2 python max python-2.7

让我们说我有一个列表元组,如:

g = (['20', '10'], ['10', '74'])
Run Code Online (Sandbox Code Playgroud)

我希望每个列表中的第一个值最多为2

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

答案是['20','10']这可能吗?这里的关键应该是什么?根据以上答案.

另一个例如:

g = (['42', '50'], ['30', '4'])
ans: max(g, key=??) = ['42', '50']
Run Code Online (Sandbox Code Playgroud)

PS:最大值我的意思是数值最大值.

Mar*_*ers 5

只需传入一个获取每个项目的第一个元素的callable.使用operator.itemgetter()最简单:

from operator import itemgetter

max(g, key=itemgetter(0))
Run Code Online (Sandbox Code Playgroud)

但是如果你必须针对整数值而不是按字母顺序排序的项进行测试,那么lambda可能会更好:

max(g, key=lambda k: int(k[0]))
Run Code Online (Sandbox Code Playgroud)

您需要哪一个取决于您对包含不同长度数字的字符串的最大期望值.是'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']
Run Code Online (Sandbox Code Playgroud)

或示出之间的差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']
Run Code Online (Sandbox Code Playgroud)