在 Python 中获取生成器的长度

在 Python 中获取生成器的长度

Get the length of a Generator in 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

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

主程序
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并对值求和。

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

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

这种方法也会耗尽生成器,因为如果不对其进行迭代就无法获得生成器的长度。

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

发表评论