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

itertools.product比嵌套​​循环慢

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

itertools.product比嵌套​​循环慢

您原始的itertool代码在不必要的代码上花费了很多额外的时间

lambda
,并手动建立了中间值列表-其中很多都可以用内置功能代替。

现在,内部的for循环确实增加了很多额外的开销:只需尝试以下操作,其性能与原始代码相当:

for a in itertools.product(carbons,hydrogens,nitrogens,oxygens17,     oxygens18,sulfurs33,sulfurs34,sulfurs36):    i, j, k, l, m, n, o, p = a    totals.append((i[0]+j[0]+k[0]+l[0]+m[0]+n[0]+o[0]+p[0],        i[1]*j[1]*k[1]*l[1]*m[1]*n[1]*o[1]*p[1]))

以下代码尽可能在CPython内置端运行,并且我对其进行了测试,使其等效于代码。值得注意的是,该代码用于

zip(*iterable)
解压缩每个产品结果。然后将
reduce
with
operator.mul
用于乘积和
sum
求和;2个用于查看列表的生成器。for循环仍然略胜一筹,但是从长远来看,可能很难对其进行硬编码了。

import itertoolsfrom operator import mulfrom functools import partialprod = partial(reduce, mul)elems = carbons, hydrogens, nitrogens, oxygens17, oxygens18, sulfurs33, sulfurs34, sulfurs36p = itertools.product(*elems)totals = [    ( sum(massdiffs), prod(chances) )    for massdiffs, chances in    ( zip(*i) for i in p )]


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

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

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