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

问题描述 投票:1回答:3

我有一个嵌套列表:

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

如何遍历此列表,选择具有最大整数值的子列表?

holder = []

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

我被困在编码第二行。

python max nested-lists
3个回答
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,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解决方案的性能超出了Lambda函数对operator中的“ bug”(我使用的术语较为宽松,代码仍然有效)的影响。如果性能无关紧要(并且可能确实如此),我更喜欢itemgetter,但是有些人希望避免使用多余的import


1
投票

这是您想要的吗?

biggest = nested_list[0]

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

1
投票

如果列表很简单,如您所建议:

>>> nested_list = [['a', 3], ['a', 1], ['a', 5], ['a',2]]
>>> k = sorted(nested_list)
>>> k[-1]
['a', 5]
>>> 
© www.soinside.com 2019 - 2024. All rights reserved.