欢迎关注生信宝典http://mp.weixin.qq.com/s/n5kkZfC8FGlzeBODarLHcw

长假结束了,这不痛苦。痛苦的是长假结束了,发现写的基因组读取程序还没运行完?

在Python系列教程中,我们提到一个概念字符串是不可修改的。这一点可以通过id函数来判断确实是对的。但是这个概念会对我们写作程序有什么影响一直没有特别深的理解。

直到有一次,实验室一个朋友要读基因组数据,结果发现3 G的基因组读一晚上都没读完,就很诧异,看了下代码,这么写的。

基因组序列是GRCh38.faFASTA格式,序列行每行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增加一组元素,列表变量aListid都没有变化。说明这是追加,不是新建。

Python使用中还有不少类似这样的需要注意的小细节,在后续会陆续推出。

而且我们生信宝典团队要开培训班了,涉及Linux系统操作Python编程R Cytoscape作图高通量数据分析。如果您有需要我们解决的问题,还请后台留言,一并纳入培训班的授课。希望通过我们的努力,让培训发挥作用,不管是来学技术,来学理念,还是来解决你手头棘手的问题,希望都能有所收获。

具体日期静待公布。

为啥我的Python这么慢 (一)相关推荐

  1. 为啥我的Python这么慢 - 项查找 (二)

    欢迎关注微信号生信宝典:https://mp.weixin.qq.com/s/-0UTgmdRQbF7I4fib62ooA 上一篇为啥我的Python这么慢, 字符串的加和和join被陈群主分享到bi ...

  2. python安装后无法运行任何软件_为啥我按照python安装教程,总说无法启动此程序,因为计算机中丢失?...

    展开全部 这是你windows操作系统文件丢失造成的,和python无关. 首先去网上搜索下载api-ms-win-crt-process-l1-1-0.dll文件,下载完毕后62616964757a ...

  3. 8个建议,为啥不使用Python开发大型项目!

    (点击上方快速关注并设置为星标,一起学Python) 来源:CSDN 整理 | 张仕影  责编 | 郑丽媛 在开发者的职业生涯中,有一个特定阶段,开发者们会从为项目做贡献到掌握自己的技巧.这个阶段对有 ...

  4. 崛起的Python,真的影响了76万人?

    随着AI的兴起,Python彻底火了.据Stack Overflow调研报告:Python的月活用户已超越了Java.成为第一,全民Python已为"大势所趋". 那么,程序员有必 ...

  5. 利用Python让你的命令行像坤坤一样会打篮球

    该图片由F. Muhammad在Pixabay上发布 完整代码可在本公众号或者公众号「01二进制」后台回复:「篮球」获取 前言 承接上文,作为一个经常逛b站的肥宅,近期b站上除了流行"品如& ...

  6. 潘石屹 python 知乎_如何看待地产大佬潘石屹微博宣布学习python这件事?对我们有什么启发?...

    补充:潘石屹中午又发了一条微博,解释为什么要学python,基本证实了我的猜测 说实话,看到潘石屹要学python,先是意外,甚至不敢相信,翻他微博亲眼看到这条消息,才确信.房地产大佬,人过五十,想想 ...

  7. python官网下载速度慢-python 官网慢

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! python是一门语言,有语法等规范. 但是落实到具体实现上,就不一样了. 用c实 ...

  8. 2020年python工资一般多少钱-2020年Python的就业薪资有多少?前景如何?

    近几年,Python已经发展成为排名前3的受欢迎编程语言,了解编程语言的发展趋势,有助于个人职业成长:而对于想要入行IT的新人而言,最大担心就是就业问题,还有所学习语言未来的发展前景,下面给大家剖析下 ...

  9. python都可以干什么-python都可以做什么用

    为什么这么多人学Python呢?很多初学者都听说python很火,可是为啥要学Python,下面谈谈我的感悟. python语言是我目前为止用的最爽的语言,因为它真的很优美.虽然c,c++,java也 ...

最新文章

  1. 生存分析-从survdiff函数中提取P值
  2. NET平台下Web树形结构程序设计
  3. ASUS WL-500W企业级无线路由器试用
  4. php3.2手册中文版,Uploadify v3.2中文手册分享
  5. Win10系统的SurfacePro4如何重装系统-3 重装完成之后的系统优化
  6. 购物车的数据应该保存在哪?
  7. linux之chsh命令
  8. [Python] 字典 get(key, default=None):获取字典中相应键的对应值
  9. Python机器学习(基础篇---监督学习(k近邻))
  10. unity 灯光阴影
  11. qq刷屏代码可复制_QQ小程序「神奇字体」从注册到发布
  12. 受力分析软件_大赛作品 | 关于Z型路灯受力情况分析
  13. 让Fireball CodeEditor控件禁止中文双倍输入
  14. WORD 用tab实现居中和右对齐
  15. 绝了!你裁我剪,斯尼帕!文末源码
  16. 搬:90 个名企笔试题和算法题
  17. JAVA中Cookie MaxAge属性及其使用
  18. 269、超五类线和六类线水晶头制作,打配线架方法
  19. 飞行机器人(三)DJI平台OSDK ROS 编译及使用
  20. 开启XP远程桌面的网络级身份验证(NLA)模式

热门文章

  1. 【软件测试】黑盒测试の因果图法
  2. 【面向对象】面向对象程序设计测试题7-对象之间的has-a/many关系测试题
  3. 【Java】浅谈Java的GUI开发
  4. 【JavaScript】Canvas绘制美丽的网螺旋旋转图形
  5. 情绪对使用产品的影响——读《设计心理学》
  6. mobaxterm用alt键作为meta键的方法
  7. [AT2699]Flip and Rectangles
  8. 老男孩IT教育在线3期新学员司毅第一期作业
  9. C语言和其他语言的不得不说的差别!
  10. C++还是Java常常无法想起数组