栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python递归生成器性能

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python递归生成器性能

rec_subsets()
依然较快(为
range(20)
),即使
result.append(s)
添加的就地
# do somethingwith s
和两者的结果
gen_subsets()
rec_subsets()
消耗。

PEP 380

yieldfrom
的以下引用(语法支持)可能解释了这一点:

当生成器链很长时,使用专门的语法可以进行优化。例如,当递归遍历树结构时,会出现此类链。

__next__()
在链中上下传递呼叫和产生值的开销可能导致本来应该是
O(n)的 操作变成最坏的情况,即 O(n 2)** 。

您可以使用生成电源集

itertools.combinations()

from itertools import combinationsdef subsets_comb(lst):    return (comb for r in range(len(lst)+1) for comb in combinations(lst, r))

range(20)
在我的机器上,速度更快:

name         time ratio commentsubsets_comb        227 msec  1.00 [range(0, 20)]subsets_ipowerset   476 msec  2.10 [range(0, 20)]subsets_rec         957 msec  4.22 [range(0, 20)]subsets_gen_pep380 2.34  sec 10.29 [range(0, 20)]subsets_gen        2.63  sec 11.59 [range(0, 20)]

要重现结果,请运行

time-subsets.py



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429194.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号