2

可以说我有一个列表元组,例如:

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

我想要两个基于每个列表中的第一个值的最大值,例如

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

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

from operator import itemgetter

max(g, key=itemgetter(0))

但是如果您必须针对整数值而不是按字典排序的项目进行测试,则 lambda 可能会更好:

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()或显示和 a lambdawith之间的区别int()

>>> 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 回答
1

如果“最大值”是指字典最大值:

>>> max(['0','5','10','100'])
'5'
>>> min(['0','5','10','100'])
'0'

然后你可以只使用 max 没有关键功能:

>>> max((['20', '10'], ['10', '74']))
['20', '10']
>>> max((['42', '50'], ['30', '4']))
['42', '50']

如果您的意思是数值最大值,请使用 lambda:

>>> max((['0','10'],['5','100'],['100','1000']))
['5', '100']
>>> max((['0','10'],['5','100'],['100','1000']),key=lambda l:int(l[0]))
['100', '1000']    
于 2013-07-06T16:41:26.243 回答
0

如果将数字存储为数字:

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