繁体   English   中英

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

[英]Select sub-list with highest integer value in a specified position

我有一个嵌套列表:

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

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

holder = []

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

我坚持编码第二行。

尝试:

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] vs. operator.itemgetter(1)问题而言,我会分析。 原则上, itemgetter应该是一种正确的方法,但我已经看到operator解决方案的性能优于 lambda 函数 do to 'bugs'(我松散地使用该术语,代码仍然有效)在operator 如果性能无关紧要(如果性能无关紧要),我更喜欢itemgetter但有些人喜欢避免额外的import

这是你想要的吗?

biggest = nested_list[0]

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM