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

时间:2010-11-28 22:13:37

标签: python max nested-lists

我有一个嵌套列表:

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 个答案:

答案 0 :(得分: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解决方案的性能优于lambda函数对'bug'(我使用松散的术语,代码仍然有用)operator 1}}。我的偏好是itemgetter,如果表现无关紧要(可能是这样),但有些人喜欢避免额外的import

答案 1 :(得分:1)

这样做你想要的吗?

biggest = nested_list[0]

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

答案 2 :(得分:1)

如果列表与您的建议一样简单:

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