为啥我的Python这么慢 (一)
欢迎关注生信宝典http://mp.weixin.qq.com/s/n5kkZfC8FGlzeBODarLHcw
长假结束了,这不痛苦。痛苦的是长假结束了,发现写的基因组读取程序还没运行完?
在Python系列教程中,我们提到一个概念字符串是不可修改的。这一点可以通过id
函数来判断确实是对的。但是这个概念会对我们写作程序有什么影响一直没有特别深的理解。
直到有一次,实验室一个朋友要读基因组数据,结果发现3 G
的基因组读一晚上都没读完,就很诧异,看了下代码,这么写的。
基因组序列是GRCh38.fa
,FASTA
格式,序列行每行70
个字符,共44,284,892行 (记住行数有多大),示例如下。
>chr1
NNNNN...(60个N)...NNNNN
ACGTA...(60个Nt)...ACGTA
...
>chr2
NNNNN...(60个N)...NNNNN
ACGTA...(60个Nt)...ACGTA
...
读取程序如下(这里只选了读取基因组的部分,点击查看更多FASTA的操作):
aDict = {}
for line in open("GRCh38.fa"):if line[0] == '>':key = line[1:-1]aDict[key] = ''else:aDict[key]+=line.strip()
程序看上去没问题,获取id
,读取一行附加在前一行后面,逻辑是对的。然后运行上程序,回去睡觉,满心欢喜期待第二天早上出来获得结果,结果啥也没出来,程序还停留在读取基因组序列步骤。
按我们服务器的性能,这不应该啊。就看代码是不是出问题了,怎么看逻辑都对。后来就想会不会是序列累加的问题,就换了一个写法。代码稍微长了些,先存入列表,再连接起来。
Dict = {}
for line in open("GRCh38.fa"):if line[0] == '>':key = line[1:-1]aDict[key] = []else:aDict[key].append(line.strip())
#--------------------------------
for key, value in aDict.items():aDict[key] = ''.join(value)
使用time
函数,查看下运行速度,不足1分钟。time
及更多程序监测方法见命令运行监测和软件安装。
time readFaJoin.py real 0m51.256s
user 0m40.729s
sys 0m10.425s
不比不知道,一比吓一跳;速度差了何止几千倍。
这时,我们重新理解下什么叫字符串不可修改。
使用id
函数来确定字符串累加跟列表累加的不同。(不同电脑或不同时间允许的id
不同,不看具体数字,只看id
的变化)
ehbio = "Sheng Xin Bao Dian"
id(ehbio)## Output: 140405359946640ehbio += ' very good'
ehbio## Output: 'Sheng Xin Bao Dian very good'id(ehbio)## Output: 140405344262576
同样的变量名字,但不同的id
。就是说python在对变量ehbio
新增字符串时,是先开辟一份内存空间,把ehbio
原有内容加新内容组成的字符串存入新的内存空间。而不是想象中的直接追加在已有字符串的后面。这样对4千万行数据的操作就是要做4千万次的内存空间开辟和字符串存储。这是一个特别耗时的步骤。
而如果是一个列表呢?
aList = ['Sheng','Xin']id(aList)## Output: 140405344245520aList.append("Bao")id(aList)## Output: 140405344245520aList.extend(["Dian", "excellent"])id(aList)## Output: 140405344245520
而列表就不一样了,无论是使用append
增加一个元素,还是使用extend
增加一组元素,列表变量aList
的id
都没有变化。说明这是追加,不是新建。
Python
使用中还有不少类似这样的需要注意的小细节,在后续会陆续推出。
而且我们生信宝典团队要开培训班了,涉及Linux系统操作
、Python编程
、R Cytoscape作图
和高通量数据分析
。如果您有需要我们解决的问题,还请后台留言,一并纳入培训班的授课。希望通过我们的努力,让培训发挥作用,不管是来学技术,来学理念,还是来解决你手头棘手的问题,希望都能有所收获。
具体日期静待公布。
为啥我的Python这么慢 (一)相关推荐
- 为啥我的Python这么慢 - 项查找 (二)
欢迎关注微信号生信宝典:https://mp.weixin.qq.com/s/-0UTgmdRQbF7I4fib62ooA 上一篇为啥我的Python这么慢, 字符串的加和和join被陈群主分享到bi ...
- python安装后无法运行任何软件_为啥我按照python安装教程,总说无法启动此程序,因为计算机中丢失?...
展开全部 这是你windows操作系统文件丢失造成的,和python无关. 首先去网上搜索下载api-ms-win-crt-process-l1-1-0.dll文件,下载完毕后62616964757a ...
- 8个建议,为啥不使用Python开发大型项目!
(点击上方快速关注并设置为星标,一起学Python) 来源:CSDN 整理 | 张仕影 责编 | 郑丽媛 在开发者的职业生涯中,有一个特定阶段,开发者们会从为项目做贡献到掌握自己的技巧.这个阶段对有 ...
- 崛起的Python,真的影响了76万人?
随着AI的兴起,Python彻底火了.据Stack Overflow调研报告:Python的月活用户已超越了Java.成为第一,全民Python已为"大势所趋". 那么,程序员有必 ...
- 利用Python让你的命令行像坤坤一样会打篮球
该图片由F. Muhammad在Pixabay上发布 完整代码可在本公众号或者公众号「01二进制」后台回复:「篮球」获取 前言 承接上文,作为一个经常逛b站的肥宅,近期b站上除了流行"品如& ...
- 潘石屹 python 知乎_如何看待地产大佬潘石屹微博宣布学习python这件事?对我们有什么启发?...
补充:潘石屹中午又发了一条微博,解释为什么要学python,基本证实了我的猜测 说实话,看到潘石屹要学python,先是意外,甚至不敢相信,翻他微博亲眼看到这条消息,才确信.房地产大佬,人过五十,想想 ...
- python官网下载速度慢-python 官网慢
广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! python是一门语言,有语法等规范. 但是落实到具体实现上,就不一样了. 用c实 ...
- 2020年python工资一般多少钱-2020年Python的就业薪资有多少?前景如何?
近几年,Python已经发展成为排名前3的受欢迎编程语言,了解编程语言的发展趋势,有助于个人职业成长:而对于想要入行IT的新人而言,最大担心就是就业问题,还有所学习语言未来的发展前景,下面给大家剖析下 ...
- python都可以干什么-python都可以做什么用
为什么这么多人学Python呢?很多初学者都听说python很火,可是为啥要学Python,下面谈谈我的感悟. python语言是我目前为止用的最爽的语言,因为它真的很优美.虽然c,c++,java也 ...
最新文章
- 生存分析-从survdiff函数中提取P值
- NET平台下Web树形结构程序设计
- ASUS WL-500W企业级无线路由器试用
- php3.2手册中文版,Uploadify v3.2中文手册分享
- Win10系统的SurfacePro4如何重装系统-3 重装完成之后的系统优化
- 购物车的数据应该保存在哪?
- linux之chsh命令
- [Python] 字典 get(key, default=None):获取字典中相应键的对应值
- Python机器学习(基础篇---监督学习(k近邻))
- unity 灯光阴影
- qq刷屏代码可复制_QQ小程序「神奇字体」从注册到发布
- 受力分析软件_大赛作品 | 关于Z型路灯受力情况分析
- 让Fireball CodeEditor控件禁止中文双倍输入
- WORD 用tab实现居中和右对齐
- 绝了!你裁我剪,斯尼帕!文末源码
- 搬:90 个名企笔试题和算法题
- JAVA中Cookie MaxAge属性及其使用
- 269、超五类线和六类线水晶头制作,打配线架方法
- 飞行机器人(三)DJI平台OSDK ROS 编译及使用
- 开启XP远程桌面的网络级身份验证(NLA)模式