当前位置: 首页 > wzjs >正文

网站项目建设方案驾校推广网络营销方案

网站项目建设方案,驾校推广网络营销方案,k8s wordpress mysql,中国新闻网今日最新消息任务 你想以随机的顺序处理一个很长的列表。 解决方案 一如既往的,在 Python 中最简单的方法常常是最好的。如果我们允许修改输入列表中的元素的顺序,那么下面的函数就是最简单和最快的: def process_all_in_random_order(data,process):#首先&#…

任务

你想以随机的顺序处理一个很长的列表。

解决方案

一如既往的,在 Python 中最简单的方法常常是最好的。如果我们允许修改输入列表中的元素的顺序,那么下面的函数就是最简单和最快的:

def process_all_in_random_order(data,process):#首先,将整个列表置于随机顺序random.shuffle(data)#然后,根据正常顺序访问for elem in data:process(elem)

如果我们需要保证输入列表不变,或者输人列表可能是其他可选代对象而不是列表可以在函数主体开头加上一条赋值语句data = list(data)。

讨论

虽然过度关心速度常常是个错误,但我们也不能忽略不同算法的性能。假设我们必须以随机顺序处理一个不重复的长列表的元素。第一个想法可能会是这样:我们可以反复地、随机地挑出元素(通过random.choice 函数),并将原列表中被挑选的元素删除以避免重复挑选:

import random
def process_random_removing(data,process):while data:elem = random.choice(data)data.remove(elem)process(elem)

然而,这个函数慢得可怕,即使输入列表只有几百个元素。每个data.remove 调用都会线性地搜索整个列表以获取要删除的元素。由于第n步的时间消耗是O(n),因此整个处理过程的消耗时间是〇(n2),正比于列表长度的平方(而且要乘上一个很大的常数)。

对第一个想法的一点提高是将注意力集中在获取随机索引上,并使用列表的pop方法来同时获取和删除元素,这种更底层的方式避免了较大的消耗,尤其是在某些情况下比如要被挑选的元素位于列表的最后,或者使用的压根不是列表,而是字典或集合。若我们面对的是字典或集合,一条思路是寄希望于使用dict的popitem方法(或者sets.Set 或 Python 2.4 内建类型 set 的等价的 pop 方法),看上去这个函数好像被设计为随机选择一个元素并删除之,但是,小心上当。

dict.popitem 的文档指出,它返回并删除字典中的任意一个元素,但这和真正的随机元素还差得很远。看看这个:

>>> d = dict(enumerate('ciao'))
>>> while d: print d.popitem()

你可能会很吃惊,在大多数的 Python 实现中,这个代码片段都将以看上去不太随机的一句话,如果需要 Python 中的方式打印d的元素,通常是(0,‘c’),然后(1,‘i’),等等。伪随机行为,需要的是标准库的randompopitem 模块。

如果你考虑使用字典而不是列表,那么你肯定在“Python 式思维”的路上又前进了一步,虽然字典并不会针对这个特定问题提供什么性能优势。但相比于选择正确的数据结构,更具有Python 风格的方式是:总是利用标准库。Python标准库是个庞大、丰富的库,塞满了各种有用的、强健的、快速的函数和类,可满足各种应用的需求。在这个前提下,最关键的一点是要意识到,想要以随机的顺序访问序列,最简单的方法是首先将序列转化成随机的顺序(也被称为对序列洗牌,是对扑克洗牌的类比),然后再线性的访问洗完牌的序列即可。random.shufle 函数就可以执行洗牌操作,本节解决方案正是利用了这个函数。

实际性能总是需要测试,而不是猜测出来的,那也正是标准库模块 timeit 存在的原因。使用一个空的 process 函数和一个长度为1000的列表作为data,process_all in_randomorder 能比 process random removing快大约10倍;对于长度为2000 的列表,这个比例变成了 20。如果提升仅仅是 25%,或者是一个常数因子2,那么通常这个性能差异是可以忽略的,因为这不会对你的整体应用产生什么性能影响,但如果算法慢了10或20倍,情况就不同了。这种可怕的低效会成为整个程序的瓶颈。当我们谈到(n2)和O(n)的行为对比时,问题的严重性根本无法忽视:对于这两种大 0的行为,随着输入数据的增长,它们消耗时间的差异可以无限地递增下去。

http://www.dtcms.com/wzjs/169212.html

相关文章:

  • 美国服务器网站推荐网站服务费一年多少钱
  • 做网站论文研究方法怎么写google竞价推广
  • 建设部网站质量终身责任承诺书金城武重庆森林经典台词
  • 淘客做网站多少钱模板建站难吗
  • 龙岗爱联有学网站建设推广新产品最好的方法
  • 网站审核员做点啥站长工具忘忧草
  • 郑州微信公众号网站建设公司怎么在百度上推广
  • 用html制作旅游网站惠州企业网站seo
  • 做网站用的三角形图片游戏推广怎么做引流
  • 长沙营销型网站建设谷歌三件套下载
  • 清华大学自动化系seo入门版
  • 石家庄企业网站开发广告优化师的工作内容
  • 九江企业网站的建设今天的新闻发布会
  • 做怎么网站推广百度贴吧官网网页
  • 无备案网站如何赚钱seo超级外链工具免费
  • 网站开发 先做前端吗特大新闻凌晨刚刚发生
  • 重庆网站建设重庆零臻科技价新媒体
  • 福清做网站的公司seo如何快速排名百度首页
  • 泰兴网站设计如何制作个人网站
  • app开发公司投入seo优化服务公司
  • 网站服务器 要求清远今日头条最新消息
  • 泉州品牌网站设计定制长沙seo结算
  • 企业网站的特点是seo站群优化技术
  • 网站设计心得体会html网页制作代码大全
  • 百度推广seo软件百度小程序优化
  • wordpress 教程主题江门关键词优化公司
  • wordpress验证密码错误长春seo快速排名
  • 自己做网站自己做SEOseo公司排名
  • wordpress页面中添加小工具栏搜索引擎优化案例
  • 上海哪家公司做网站最好百度竞价推广出价技巧