在 Python 中获取生成器的长度
Get the length of a Generator in Python
要在 Python 中获取生成器的长度:
- 使用
list()
该类将生成器转换为列表。 - 将列表传递给
len()
函数,例如len(list(gen))
。 - 请注意,一旦生成器转换为列表,它就会被耗尽。
主程序
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
并对值求和。
此解决方案不需要我们将生成器转换为列表,并且可能消耗更少的内存。
但是,性能差异可以忽略不计,除非您处理的是具有数百万个项目的生成器。
这种方法也会耗尽生成器,因为如果不对其进行迭代就无法获得生成器的长度。
确保您没有尝试获取无限生成器的长度,因为该操作永远不会完成。