Sai*_*ait 0 python generator count
假设我有一个列表:
my_list = range(10)
Run Code Online (Sandbox Code Playgroud)
而且我想计算列表中有多少偶数.请注意,我对这些值不感兴趣,我只想要它们的数量.所以我可以:
len( [0 for i in my_list if i % 2 == 0] ) # Method 1
len( [i for i in my_list if i % 2 == 0] ) # Method 2
len( [_ for i in my_list if i % 2 == 0] ) # Method 3
Run Code Online (Sandbox Code Playgroud)
从速度或内存的角度来看,上述任何一种方法都比其他方法更好吗?
实际上我甚至不需要构建列表,但我不想:
counter = 0
for item in my_list:
if item % 2 == 0:
counter += 1
Run Code Online (Sandbox Code Playgroud)
那么,哪一个是用发电机计数的好方法?
PS:我的案例中的列表有更多内存繁重的项目,这就是为什么我想要尽可能优化.
不使用上述任何一种.使用sum()和生成器表达式:
sum(i % 2 == 0 for i in mylist)
Run Code Online (Sandbox Code Playgroud)
在Python中,bool布尔类型是其子类,int并且True具有整数值1,Falsehas 0,因此您可以对一系列True和False结果求和.
所述sum()-with发电机表达只需要在存储器中保持一个布尔的时间,没有中介列表已经被产生并保持在大约只是计算的长度.
或者,坚持过滤和总结1文字:
sum(1 for i in mylist if i % 2 == 0)
Run Code Online (Sandbox Code Playgroud)
这导致需要添加的对象更少.
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |