选择指定位置上具有最高整数值的子列表

1 投票
3 回答
3554 浏览
提问于 2025-04-16 07:44

我有一个嵌套列表:

nested_list = [['a', 3], ['a', 1], ['a', 5]]

我该如何遍历这个列表,选择其中整数值最大的子列表呢?

holder = []

for entry in nested_list:
    tmp = sublist with max entry[2] value
    holder.append(tmp)

我在写第二行代码的时候遇到了困难。

3 个回答

1

如果这个列表像你说的那么简单:

>>> nested_list = [['a', 3], ['a', 1], ['a', 5], ['a',2]]
>>> k = sorted(nested_list)
>>> k[-1]
['a', 5]
>>> 
1

这个代码能满足你的需求吗?

biggest = nested_list[0]

for entry in nested_list:
    if entry[1] > biggest[1]:
        biggest = entry
8

尝试:

max(nested_list, key=lambda x: x[1])

或者

import operator

max(nested_list, key=operator.itemgetter(1))

如果第一个项目总是 'a',你可以直接这样做:

max(nested_list)

如果你愿意深入了解类型检查,并且想要处理任意的子列表(只处理一层,比如 [12, 'a', 12, 42, 'b']),你可以这样做:

import numbers

max(nested_list, key=lambda x: max(i for i in x 
                                   if isinstance(i, numbers.Integral)))

无论如何,如果你不确定 nested_list 的元素实际上是列表,你可以这样做:

import collections

max((s for s in nested_list 
     if isinstance(s, collections.Sequence)), 
    key=some_key_function)

然后你可以传入一个你自己设计的键函数,或者这个答案中的其他函数。

关于 lambda x: x[1]operator.itemgetter(1) 的问题,我会进行性能分析。原则上,itemgetter 应该是正确的选择,但我见过 operator 的解决方案因为一些“bug”(我这个词用得比较宽泛,代码还是能工作的)而被 lambda 函数超越。如果性能不重要的话,我更倾向于使用 itemgetter(如果重要的话可能也是),但有些人喜欢避免额外的 import

撰写回答