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

中国网站的建设/长沙大型网站建设公司

中国网站的建设,长沙大型网站建设公司,软文营销为什么要讲故事,大连网页设计学校上一篇为啥我的Python这么慢, 字符串的加和和join被陈群主分享到biopython-生信QQ群时,乐平指出字典的写法存在问题,并给了一篇知乎的链接https://zhuanlan.zhihu.com/p/28738634指导如何高效字典操作。 根据那篇文章改了两处写法,如下 (存储…

上一篇为啥我的Python这么慢, 字符串的加和和join被陈群主分享到biopython-生信QQ群时,乐平指出字典的写法存在问题,并给了一篇知乎的链接https://zhuanlan.zhihu.com/p/28738634指导如何高效字典操作。

根据那篇文章改了两处写法,如下 (存储于readFaJoin2.py文件中):

from collections import defaultdictaDict = defaultdict(list)for line in open("GRCh38.fa"):if line[0] == '>':key = line[1:-1]else:aDict[key].append(line.strip())
#----------------------------------------
for key, value in aDict.iteritems():aDict[key] = ''.join(value)

比之前提速接近2s。一个是使用了defaultdict初始化字典,另外一个是用iteritems遍历字典,节省近一半的内存。

time python readFaJoin2.pyreal    0m49.114s
user    0m38.442s
sys    0m10.565s

defaultdict用在这效果不太明显,之前处理全基因组每个位点数据的频繁存取时,defaultdict在程序无论速度还是写法上都有很大提升。

字典本身还有更多高效用法,可以去参考知乎的那篇文章。这儿介绍的是妙用字典的哈希属性快速查找项。

在生信操作中,常常会在一个大矩阵中匹配已小部分基因或位点,提取关注的基因或位点的信息。最开始的写法是:

targetL = ['a', 'n', 'c', 'd']
if item in targetL:other_operations

后来,随着数据量变大,发现这个速度并不快,于是换了下面的方式

targetL = ['a', 'n', 'c', 'd']
targetD = dict.fromkeys(targetL, 0)if item in targetD:other_operations

又可以愉快的查询了。

为什么呢?

这是因为:在Pyhton中列表的查询时间复杂度是O(n)(n是列表长度);字典的查询负责度是O(1)(与字典长度无关)。

字典的查询复杂度为什么是O(1)呢? Python中实现了一个hash函数,把字典的key转换为哈希值,组成连续地址的数字哈希表。字典的每次查询转换为了从数组特定位置取出一个元素,所以时间复杂度为O(1)

后来发现pythonset也是用hash table存储,所以上面的程序,可以更简化而不影响速度。

targetS = set(['a', 'n', 'c', 'd'])if item in targetS:other_operations

那么速度到底差多大,有没有直观一些的展示呢? 这是StackOverflow的一个简化例子, 百万倍速度差异。

ct@ehbio:~$ python -mtimeit -s 'd=range(10**7)' '5*10**6 in d'

10 loops, best of 3: 182 msec per loop

ct@ehbio:~$ python -mtimeit -s 'd=dict.fromkeys(range(10**7))' '5*10**6 in d'

10000000 loops, best of 3: 0.16 usec per loop

ct@ehbio:~$ python -mtimeit -s 'd=set(range(10**7))' '5*10**6 in d'

10000000 loops, best of 3: 0.164 usec per loop

Ref:

  • 速度测试例子 https://stackoverflow.com/questions/513882/python-list-vs-dict-for-look-up-table

  • python各数据结构时间复杂度 https://wiki.python.org/moin/TimeComplexity

http://www.jmfq.cn/news/5329603.html

相关文章:

  • 真空电镀技术支持 东莞网站建设/房地产市场现状分析
  • 河南专业网站建设公司排名/软件开发培训机构去哪个学校
  • 内部网站建设软件下载/网络优化大师下载
  • 济南网站建设和优化/seo怎么优化
  • 微网站建设资讯/上海百度关键词搜索推广服务
  • 泉州建设网站制作/收录优美图片topit
  • 高阳网站建设/贴吧aso优化贴吧
  • 网站建设与管理视频教程/sem论坛
  • 网站建设原/社群营销案例
  • 怎么免费建设交友网站/seo是什么及作用
  • 潍坊网站建设官网/seo软件哪个好
  • 垂直网站建设方案/小红书代运营
  • 实力网站建设/安徽网站关键字优化
  • 普洱住房和城乡建设委员会网站/个人怎么做免费百度推广
  • 绵阳企业网站建设/建站平台在线提交功能
  • 中升乙源建设公司网站/最有效的宣传方式
  • 乐云seo网站建设性价比高/免费网站制作app
  • 微商城网站建设推广/企业网络宣传推广方案
  • 网站建设公司海报/如何在百度推广自己
  • 建设银行辽宁分行报名网站/中国seo排行榜
  • 聊城宏远网站建设优化/原创代写文章平台
  • 番禺网站建设设计/武威网站seo
  • 东莞网站建设设计/35个成功的市场营销策划案例
  • 成都市建设局网站/百度高级搜索
  • 住房和建设部网站/自媒体引流推广
  • 陕西省建设工程质量监督站网站/杭州百度快速排名提升
  • 德州力点科技 网站建设/百度的seo排名怎么刷
  • 阳澄湖大闸蟹网站建设/成都网站排名优化公司
  • 广东深圳建设工程信息网站/2022年关键词排名
  • 东莞易宣网站建设公司怎么样/黑马培训