我有一个这样的列表:
alkaline_earth_values = [['beryllium', 4], ['magnesium', 12],['calcium', 20],
['strontium', 38], ['barium', 56], ['radium', 88]]
如果我只是使用max(list)
方法,它将返回答案'strontium'
,如果我试图找到最大名称这将是正确的,但是我试图返回其整数最高的元素。
max(alkaline_earth_values, key=lambda x: x[1])
这样做的原因是因为max函数的key参数指定了当max想要知道将搜索最大元素的值时调用的函数。 max将为序列中的每个元素调用该函数。并且lambda x: x[1]
创建了一个小函数,它接收一个列表并返回第一个(从零开始计数)元素。所以
k = lambda x: x[1]
就像说的一样
def k(l):
return l[1]
但在这种情况下使用更短更好。
使用key
参数。
max(alk..., key=operator.itemgetter(1))
假设列表中的项目实际上仍然是一个数字是相当棘手的。如果数字已成为字符串,则max()
将返回具有最高第一个数字的“值”:
alkaline_earth_values = [['beryllium', '9'], ['magnesium', '12'],['calcium', '20'],
['strontium', '38'], ['barium', '56'], ['radium', '88']]
max(alkaline_earth_values, key=lambda x: x[1])
返回['beryllium', '9']
max(alkaline_earth_values, key=lambda x: float(x[1]))
当你确定它将是一个数字时,你会做到这一点
对于高速考虑大熊猫或numpy:
Import pandas as pd
alkaline_earth_values = [['beryllium', 4], ['magnesium', 12],['calcium', 20],
['strontium', 38], ['barium', 56], ['radium', 88]]
pd.DataFrame(alkaline_earth_values)[1].max()