【问题标题】:Length of the longest sublist? [duplicate]最长子列表的长度? [复制]
【发布时间】:2012-11-15 15:37:16
【问题描述】:

可能重复:
Python’s most efficient way to choose longest string in list?

我有一个列表 L

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

我想返回最长子列表的长度而不需要遍历它们,在本例中为 3,因为 [1,2,3] 的长度为 3,它是四个子列表中最长的。我试过 len(max(L)) 但这并没有达到我想要的效果。有什么方法可以做到这一点,还是我唯一的方法是循环?

【问题讨论】:

标签: python list


【解决方案1】:

max(L,key=len) 将为您提供长度最长的对象(在您的示例中为[1,2,3])- 要实际获得长度(如果您只关心这一点),您可以使用len(max(L,key=len)) 这有点难看- 我会把它分成两行。或者您可以使用 ecatamur 提供的版本。

所有这些答案都有循环——在我的例子中,循环是隐式,这通常意味着它们将在优化的本机机器代码中执行。仔细想想,不看每个元素怎么知道哪个元素最长?


最后,请注意key=function 不是max 特有的功能。很多 python 内置函数 (max,min,sorted,itertools.groupby,...) 使用这个特定的关键字参数。绝对值得花一点时间来了解它的工作原理以及它的典型作用。

【讨论】:

  • 它是如何工作的?啊,好吧,所以没有办法避免它?好的——谢谢!
  • @IAmBatman 你读过max 的文档吗?您是否知道函数是第一类值(这意味着它们可以作为参数传递给其他函数)?
  • @IAmBatman -- maxkey 函数应用于列表中的每个元素,并选择key 函数返回最大的元素。
  • @delnan 我知道函数可以用作参数,是的......我只是没有太多使用它们的经验
  • @IAmBatman:确实,如果您想知道最大长度,您必须这样做。
【解决方案2】:

尝试理解:

max(len(l) for l in L)

【讨论】:

  • 我认为使用key 关键字更快。
  • @MartijnPieters 很可能,因为它在 C 中(并且 PyPy 在某些情况下难以优化生成器表达式)。但这不是我推荐它的原因。这对我来说也更清楚(但这也很好,而且我注意到我比许多 Python 程序员更倾向于函数式编程)。
  • @MartijnPieters -- 存在非常细微的差异。 max(L,key=len) 给出了最大的对象len,但它没有给出它的长度:)
  • @mgilson:我也刚刚意识到这一点。 :-)
猜你喜欢
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
相关资源
最近更新 更多