【问题标题】:Count number of elements in a iterable [duplicate]计算可迭代元素的数量[重复]
【发布时间】:2014-11-12 15:37:42
【问题描述】:

在不将元素存储在内存中的情况下,计算可迭代(通过迭代)中元素数量的最佳方法是什么?

现在,我只是在做sum(1 for x in iterable)。我希望在itertools 中找到一些东西,但似乎什么都没有。

【问题讨论】:

标签: python count iterator iterable


【解决方案1】:

sum(1 for x in iterable)最好的方法。并非一切都需要专用的itertools 函数。 :-) 我注意到post you claim not to be a dupe of 上投票最多的答案也建议您使用它。

当然,以防万一,查看itertools 总是有价值的,如果你这样做了,别忘了查看recipes section;你会发现 quantify() 配方几乎做同样的事情,但有一个谓词来过滤可迭代:

def quantify(iterable, pred=bool):
    "Count how many times the predicate is true"
    return sum(imap(pred, iterable))

【讨论】:

    【解决方案2】:

    IMO 这个功能应该包含在 itertools 中,但不是。

    more-itertools 是一个包含ilen 的包,但对于您的情况可能有点重。当我遇到这种情况时,我只是将您常用的解决方法定义为ilen

    def ilen(iterable):
        return sum(1 for _ in iterable)
    

    【讨论】:

    • 我认为采用itertools 提供的基本构建块 并将像单行这样简单的东西包装到一个函数中没有多大价值。因为more-itertools 中的ilen() 函数完全符合您在此处的答案中包含的内容。
    • @MartijnPieters 如果经常使用它会很有用,因为sum 解决方法对我来说并不那么干净。
    • more-itertools 似乎包含了很多有用的方法,我希望我早点知道!
    • @simonzack 注意you're using the sum workaround 当你使用ilen 时,我想这就是Martijn Pieters 所指的。不过,ilen 让你的意图更加清晰。
    猜你喜欢
    • 2021-12-22
    • 2021-12-12
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 2013-08-20
    相关资源
    最近更新 更多