首页 > 解决方案 > 生成一个无限列表?

问题描述

知道这很可能以失败告终,我想知道 Python 将如何处理这种情况以及我的代码是否真的“有意义”,至少在原则上是这样。所以这是我的尝试,我对 python 还很陌生(几天前),所以我确信我的代码对于那些有更多经验的人来说似乎很有趣,但请多多包涵。

def make_inf_lst(lst):
  lst = [0]
  while 1 == 1:
    for i in range(0, len(lst)):
      add = lst[i] + 1
      lst.append(add)
print(make_inf_lst([]))

这是我在尝试运行上述内容的 DOS 窗口中遇到的错误:

Traceback (most recent call last):
  File "break_python.py", line 7, in <module>
    print(make_inf_lst([]))
  File "break_python.py", line 6, in make_inf_lst
    lst.append(add)
MemoryError

先感谢您。

标签: pythonpython-3.xlistinfinite

解决方案


具有“无限”数据结构的语言实际上是在生成对象,这些对象会延迟或“按需”生成其值。他们不是预先创建整个列表,而是创建一个对象,当被要求提供一个值时,可以在那个时候创建​​它。

在 Python 中,这最容易使用生成器进行管理。

def make_inf_sequence():
    x = 0
    while True:
        yield x
        x = x + 1

# This returns immediately
naturals = make_inf_sequence()

# This loop runs forever
for i in naturals:
    print(i)

推荐阅读