发电机输出的长度

发布于 2021-01-29 19:36:16

Python提供了一种很好的方法来获取渴望的迭代的长度len(x)。但是对于以生成器理解和函数表示的惰性可迭代对象,我找不到类似的东西。当然,编写类似以下内容并不难:

def iterlen(x):
  n = 0
  try:
    while True:
      next(x)
      n += 1
  except StopIteration: pass
  return n

但是我无法摆脱自己重新设计自行车的感觉。

(当我键入函数时,我想到了一个想法:也许确实没有这样的函数,因为它“破坏了”其参数。不过,对于我的情况而言,这不是问题)。

PS:关于第一个答案-是的,类似的方法len(list(x))也可以工作,但是会大大增加内存的使用率。

PPS:重新检查…忽略PS,似乎我在尝试时出错,它可以正常工作。抱歉,添麻烦了。

关注者
0
被浏览
75
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    没有一个是因为在一般情况下您无法执行此操作-如果您有一个惰性无限生成器怎么办?例如:

    def fib():
        a, b = 0, 1
        while True:
            a, b = b, a + b
            yield a
    

    这永远不会终止,但会生成斐波那契数。您可以通过拨打来获得任意数量的斐波纳契数next()

    如果您确实需要知道项的数量,那么无论如何都无法一次线性地遍历它们,因此只能使用其他数据结构,例如常规列表。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看