假设我有一个任意的可迭代对象 - 例如,一个迭代文件行和
yield
匹配正则表达式的生成器。
我如何计算该可迭代对象中的项目数,假设我不这样做不关心元素本身?
可以使用
sum()
函数来计算可迭代对象中的元素数量,而无需存储它们。 以下是如何操作:
def count_items(iterable):
"""计算可迭代对象中的项目数量。
Args:
iterable: 要计算其大小的可迭代对象。
Returns:
iterable 中的项目数。
"""
return sum(1 for _ in iterable)
此代码的工作原理如下:
-
创建一个生成器表达式:
1 for _ in iterable
-
此表达式遍历给定的
iterable
。 -
对于
iterable
中的每个元素,它都会生成值1
。_
用于表示我们不关心实际元素,而只关心它们的计数。 -
使用
sum()
计算总和:sum(1 for _ in iterable)
-
sum()
函数接受一个可迭代对象并将所有元素相加。 -
在这种情况下,它会对生成器表达式产生的所有
1
求和,有效地计算了元素的数量。
示例用法:
# 使用生成器
my_generator = (x**2 for x in range(1, 11))
count = count_items(my_generator)
print(f"生成器中的元素数量:{count}") # 输出:10
# 使用列表
my_list = [2, 4, 6, 8, 10]
count = count_items(my_list)
print(f"列表中的元素数量:{count}") # 输出:5
优点:
- 内存效率高: 此方法不需要将所有元素存储在内存中,这使得它成为处理大型可迭代对象的理想选择。
- 适用于任何可迭代对象: 它适用于生成器、列表、元组以及任何可以迭代的对象。
注意: 如果可迭代对象是无限的,则此方法将永远运行。
标签:python,iterator,generator,iterable From: 5384570