【问题标题】:A generator that counts to infinity [duplicate]计数到无穷大的生成器[重复]
【发布时间】:2016-11-12 07:45:22
【问题描述】:

只是为了好玩和好奇,我设计了这种方式来编写一个计数到无穷大的生成器,至少在原则上是这样。没有什么非常pythonian。随便玩玩。

但显然,lis 每次迭代都会变长,直到最终出现问题。

还有其他(更好或更坏)的方法可以实现相同的目标吗?请分享。

lis = [1]
gen = ((k, lis.append(k+1))[0] for k in lis)

使用它

for j in gen:
    print(j)

【问题讨论】:

  • for i in itertools.count(1): print(i)... ?请参阅docs,其中还包含等效的 Python 代码...
  • @TigerhawkT3 不确定这是最好的欺骗目标(我一直在寻找一个)——因为它主要关注无限重复的序列(尽管一个答案确实简要提到了itertools.count)——而不是无限递增序列...
  • 如果要在内存中保存一个列表,为什么还要使用生成器?
  • @JonClements - 这个问题只要求“无限元素”,itertools.count() 是投票率最高的答案中的第一个建议。它不是 100% 专注于只增加序列以完全排除静态循环,但我不认为这是一个缺陷。
  • @TigerhawkT3 引用 OP:我设计了这种方式来编写一个无穷大的生成器 [...] 还有其他(更好或更坏)的方法吗实现相同的目标? 我将 countinfinite iterable 区分开来。

标签: python python-3.x


【解决方案1】:

你可以使用itertools.count:

import itertools

for i in itertools.count(1):
    print(i)

根据上面的文档,这在功能上等同于:

def count(start=0, step=1):
    # count(10) --> 10 11 12 13 14 ...
    # count(2.5, 0.5) -> 2.5 3.0 3.5 ...
    n = start
    while True:
        yield n
        n += step

【讨论】:

    【解决方案2】:

    只需使用itertools.count。这是一个例子:

    >>> from itertools import count
    >>> gen = count(0)
    >>> next(gen)
    0
    >>> next(gen)
    1
    >>> next(gen)
    2
    >>> next(gen)
    3
    >>> next(gen)
    4
    >>>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 2017-05-30
      • 2022-08-12
      • 2010-12-21
      • 2014-09-21
      • 2018-05-12
      • 1970-01-01
      相关资源
      最近更新 更多