python - 如何从无限生成器列表中获取前 n 个元素?

标签 python

我有这个无限发电机:

def infiniList():
    count = 0
    ls = []
    while True:
        yield ls
        count += 1
        ls.append(count)

有没有办法获取前n个元素?我的意思是一个简单的方法,我做到了:

n = 5
ls = infiniList()
for i in range(n):
  rs = next(ls)

Output:

print(rs)
[1, 2, 3, 4]

最佳答案

itertools.islice 正是这样做的,尽管在您的示例中您需要小心,不要重复生成对不断修改的同一对象的引用:

def infiniList():
    count = 0
    ls = []
    while True:
        yield ls[:]  # here I added copying
        count += 1
        ls.append(count)  # or you could write "ls = ls + [count]" and not need to make a copy above

import itertools
print(list(itertools.islice(infiniList(), 5)))

关于python - 如何从无限生成器列表中获取前 n 个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58355771/

相关文章:

python - 使用 pandas.read_csv 和索引读取 csv 文件会创建 NaN 条目

python - 在django模型中获取多对多关联的多对多字段

python - 使用 pyplot.scatter() 方法绘制元组列表(x 坐标、y 坐标、颜色)

python - 在使用 NumPy 时理解 randn 的最小值和最大值

python - 解析多个 XML 虽然不是所有文件都具有 python 的元素

python - 如何知道在findContour之后是否需要反转阈值类型

python - 如何使用 get_or_create 在 django 中定义默认的 ForeignKey 对象?

python - 如何从python numpy中的矩阵中获取 float

python - 将 build_ext 选项传递给 pip install

python - 如何在 linux 中使用 python 更改 wifi 接口(interface)的 IP 地址?