我有一个嵌套列表:python - 在指定位置选择具有最高整数值的子列表?
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 - 在指定位置选择具有最高整数值的子列表?
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]
与operator.itemgetter(1)
的问题,我会介绍。尽管如此,itemgetter
应该是一个正确的方法,但我看到operator
解决方案在operator
中的性能优于lambda函数对'bug'(我使用的术语松散,代码仍然有效)。如果性能无关紧要(如果有的话),我的意向是itemgetter
,但有些人喜欢避免额外的import
。
这是做你想做的吗?
biggest = nested_list[0]
for entry in nested_list:
if entry[1] > biggest[1]:
biggest = entry
没有理由在Python中编写这样的代码。 – 2010-11-28 22:22:13
@Ignacio Vazquez-Abrams,谨慎地阐述? max(...)的版本稍微优雅一点,但OP似乎是一个对语言来说不熟悉的人,我不希望他们在理解循环之前就深入到lambda表达式中。 – xscott 2010-11-28 22:28:23
如果列表很简单,只要你的建议:
>>> nested_list = [['a', 3], ['a', 1], ['a', 5], ['a',2]]
>>> k = sorted(nested_list)
>>> k[-1]
['a', 5]
>>>
我不得不求助于我的Python书籍找出解决方案。所以,我现在不仅有一个解决方案,我了解更多的Python。谢谢! – 2010-11-28 23:15:04