在 Python 中获取生成器的长度

在 Python 中获取生成器的长度:

  1. 使用 list() 类将生成器转换为列表。
  2. 将列表传递给 len() 函数,例如 len(list(gen))
  3. 请注意,一旦生成器转换为列表,它就会被耗尽。
def g():
    yield 1
    yield 2
    yield 3


gen = g()

result = len(list(gen))
print(result)  # 👉️ 3

在 Python 中获取生成器的长度

请注意,一旦生成器转换为列表,它就会被耗尽。

def g():
    yield 1
    yield 2
    yield 3


gen = g()

print(len(list(gen))) # 👉️ 3

print(len(list(gen)))  # 👉️ 0

我们可以将生成器转换为列表并将结果存储在变量中。

def g():
    yield 1
    yield 2
    yield 3


gen = g()

my_list = list(gen)

print(len(my_list))  # 👉️ 3

现在,我们可以根据需要多次迭代列表。

另一种方法是使用内置的 sum() 函数。

def g():
    yield 1
    yield 2
    yield 3


gen = g()


result = sum(1 for _ in gen)
print(result)  # 👉️ 3

print(list(gen))  # 👉️ []

sum 函数接受一个可迭代对象,从左到右对其项求和并返回总数。

我们有效地将生成器中的每个项目替换为 1 并对值求和。

此解决方案不需要我们将生成器转换为列表,并且可能会减少内存消耗。

但是,除非我们处理具有数百万个项目的生成器,否则性能差异可以忽略不计。

这种方法也会耗尽生成器,因为没有迭代就无法获得生成器的长度。

确保我们没有尝试获取无限生成器的长度,因为该操作永远不会完成。