在嵌套列表的第二列中查找最大值?
- 2025-02-13 08:36:00
- admin 原创
- 35
问题描述:
我有这样一个列表:
alkaline_earth_values = [['beryllium', 4],
['magnesium', 12],
['calcium', 20],
['strontium', 38],
['barium', 56],
['radium', 88]]
如果我只是使用该max(list)
方法,它将返回答案'strontium'
,如果我试图找到最大名称,这将是正确的,但是我试图返回整数最高的元素。
解决方案 1:
max(alkaline_earth_values, key=lambda x: x[1])
之所以有效,是因为max函数的关键参数指定了一个函数,当max想要知道搜索最大元素的值时,该函数会被调用。max将对序列中的每个元素调用该函数。并创建一个小函数,该函数接受一个列表并返回第一个(从零开始计数)元素。所以lambda x: x[1]
k = lambda x: x[1]
相当于说
def k(l):
return l[1]
但更简短,在这种情况下使用起来更方便。
解决方案 2:
使用key
論點。
max(alk..., key=operator.itemgetter(1))
解决方案 3:
假设列表中的项目实际上仍然是数字是相当棘手的。 如果数字已变为字符串,则将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]))
可以解决问题,当你确定它是一个数字时
解决方案 4:
为了高速,请考虑使用 pandas 或 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()
解决方案 5:
您可以将列表列表转换为Counter
并调用该.most_common()
方法。这可让您轻松找到最大值或前 n 个值:
>>> from collections import Counter
>>> Counter(dict(alkaline_earth_values)).most_common(1)
[('radium', 88)]
>>> Counter(dict(alkaline_earth_values)).most_common(3)
[('radium', 88), ('barium', 56), ('strontium', 38)]
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD