2012-11-15 373 views
13

可能重复:
Python’s most efficient way to choose longest string in list?Python:最长的子列表的长度?

我有一个列表L

L = [[1,2,3],[5,7],[1,3],[77]] 

我想回到最长的子表的长度,而无需遍历它们,这种情况3是因为[1,2,3]是长度3并且是四个子列表中最长的。我试过len(max(L)),但是这不会做我想要的。任何方式来做到这一点,或者是一个循环我唯一的方式?

+0

http://stackoverflow.com/q/873327/1180720 – gefei

回答

33

max(L,key=len)会给你最长的长度([1,2,3]在你的例子)对象 - 真正得到的长度(如果这就是你关心的),你可以做len(max(L,key=len))这是一个有点难看 - 我把它分解成2行。或者你可以使用ecatamur提供的版本。

所有这些答案都有循环 - 在我的情况下,循环是隐含这通常意味着它们将在优化的本地机器代码中执行。如果你仔细想想,你怎么能知道哪一个元素最长而不看每一个?


最后,请注意key=function不是一个特点,就是具体到max。很多python内置函数(max,min,sorted, itertools.groupby,...)都使用这个特定的关键字参数。绝对值得投入一点时间来了解它是如何工作的以及它通常会做什么。

+0

的DUP是如何运作的?好的,所以没办法避免它?好的,谢谢! – IAmBatman

+0

@IAmBatman你读过'max'的文档吗?你知道函数是第一个类的值(这意味着,除其他外,它们可以作为参数传递给其他函数)? – delnan

+0

@IAmBatman - 'max'将'key'函数应用到列表中的每个元素,并选择'key'函数返回的最大值。 – mgilson

10

尝试理解:

max(len(l) for l in L) 
+0

我想,使用'key'关键字更快。 –

+0

@MartijnPieters可能,看到它在C中(在某些情况下PyPy有优化生成器表达式的麻烦)。但这不是我推荐它的原因。这对我来说也更加清晰(但这也很好,我注意到我比许多Python程序员更倾向于函数式编程)。 – delnan

+0

@MartijnPieters - 有非常细微的差异。 'max(L,key = len)'给对象最大的'len',但它不会给你它的长度:) – mgilson