【问题标题】:Does python iterable imply countable?python iterable是否意味着可数?
【发布时间】:2020-07-29 08:26:45
【问题描述】:

我偶然发现了一个有趣的案例 - 我唯一确定的是我会得到一个 iterable 对象。

我真正并且唯一想做的就是数一数。

我搜索了 python 中的 iterable 是否意味着可数,我发现许多地方都声称是这样,除了官方文档。

所以出现了两个问题:

  1. 在 Python 中,iterable => 是否可数(项目数)?还是这种情况很常见?

  2. 是否有一种通用的 Python 方式从可迭代对象中获取计数?这似乎在这里得到了回答https://stackoverflow.com/a/3345807/1835470 即不是不计其数,但作者提供了一个pythonic one-liner:

    sum(1 for _ in iterableObject)
    

【问题讨论】:

  • 一个可迭代对象可能无限长,例如itertools.count()
  • 嗯,它可以是无限的,当然。但这可能不是你的意思。顺便说一句,你是什么意思“不计数”?计数到底是什么意思?
  • @juanpa.arrivillaga 我猜是用词不当——我的意思是循环/迭代并计算迭代次数
  • @jave.web 这就是那条线正在做的事情。
  • @juanpa.arrivillaga 是的,我知道,我在问是否有办法不用自己使用 oneliner :)

标签: python count iterator iterable countable


【解决方案1】:

iterables 不支持len 方法。要获得它们的长度,您必须将它们转换为支持它的东西或手动循环它们(并在过程中耗尽它们)同时计数,例如您发布的这段代码 sn-p。

因此,使用可迭代对象和需要知道其长度的要求有些矛盾。另外,正如@Veedrac 在 cmets 中所说,可迭代对象可以具有 无限长度

总而言之,如果您需要知道包含多少项,则需要不同的数据结构。

【讨论】:

  • 您的意思是默认情况下不支持 len() 调用它们对吗?然而,结构很好 - 有时不需要知道长度,有时它是(这可能发生在列表的常规情况下 - 也就是说,列表特别支持两者)
猜你喜欢
  • 2023-02-10
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 2019-03-10
  • 2015-03-12
  • 2016-05-16
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多