在嵌套列表中找到第二列的最大值?

46 投票
5 回答
48840 浏览
提问于 2025-04-16 10:37

我有一个这样的列表:

alkaline_earth_values = [['beryllium',  4], 
                         ['magnesium', 12],
                         ['calcium',   20],
                         ['strontium', 38], 
                         ['barium',    56], 
                         ['radium',    88]]

如果我直接用 max(list) 这个方法,它会返回 'strontium',这在我想找出最大 名字 的时候是对的。不过我其实是想找出那个整数值最高的元素。

5 个回答

0

假设列表中的一个项目仍然是数字,这其实有点棘手。如果这些数字变成了字符串,那么 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]))

当你确定它会是数字时,这个方法就能解决问题。

8

使用 key 参数。

max(alk..., key=operator.itemgetter(1))
84
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]

但这样说更简洁,适合在这种情况下使用。

撰写回答