2010-11-28 52 views

回答

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解决方案在operator中的性能优于lambda函数对'bug'(我使用的术语松散,代码仍然有效)。如果性能无关紧要(如果有的话),我的意向是itemgetter,但有些人喜欢避免额外的import

+1

我不得不求助于我的Python书籍找出解决方案。所以,我现在不仅有一个解决方案,我了解更多的Python。谢谢! – 2010-11-28 23:15:04

1

这是做你想做的吗?

biggest = nested_list[0] 

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

没有理由在Python中编写这样的代码。 – 2010-11-28 22:22:13

+0

@Ignacio Vazquez-Abrams,谨慎地阐述? max(...)的版本稍微优雅一点,但OP似乎是一个对语言来说不熟悉的人,我不希望他们在理解循环之前就深入到lambda表达式中。 – xscott 2010-11-28 22:28:23

1

如果列表很简单,只要你的建议:

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