我是靠谱客的博主 潇洒大米,最近开发中收集的这篇文章主要介绍python中if的效率_python优化代码(文本查找)效率?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

发现一个很有意思的事情, 大家回答很积极, 但是实际结果呢, 我刚好无聊小测试了一下, 过程如下:

介于题主提供的示例文本才两行, 所以我把1.txt和genemark.gff3分别加倍到4000行

(qiime) [ngs@cluster ~]$ wc -l 1.txt

4000 1.txt

(qiime) [ngs@cluster ~]$ wc -l genemark.gff3

4000 genemark.gff3

按照回复楼层数排序, 如题主的代码是hi.py,然后一楼答主的代码是hi1.py,依次类推

先看题主的

(qiime) [ngs@cluster ~]$ time python hi.py > hi.txt

real 0m0.049s

user 0m0.042s

sys 0m0.007s

(qiime) [ngs@cluster ~]$ wc -l hi.txt

6000 hi.txt

感觉是有重复

一楼答主的

time python hi1.py > hi1.txt

real 0m21.727s

user 0m21.171s

sys 0m0.547s

(qiime) [ngs@cluster ~]$ wc -l hi1.txt

8000000 hi1.txt

重复到姥姥家了

二楼答主的

(qiime) [ngs@cluster ~]$ time python hi2.py > hi2.txt

real 0m16.326s

user 0m14.550s

sys 0m1.044s

(qiime) [ngs@cluster ~]$ wc -l hi2.txt

12000000 hi2.txt

三楼答主的

(qiime) [ngs@cluster ~]$ time python hi3.py > hi3.txt

real 0m27.079s

user 0m26.281s

sys 0m0.786s

(qiime) [ngs@cluster ~]$ wc -l hi3.txt

12000000 hi3.txt

三楼答主的结果跟二楼一样, 但是慢了10秒多

四楼答主的(冤枉四楼同学了,这是py3代码)

(py3) [ngs@cluster ~]$ time python hi4.py > hi4.txt

real 0m0.074s

user 0m0.064s

sys 0m0.010s

(py3) [ngs@cluster ~]$ wc -l hi4.txt

4000 hi4.txt

果然是有交流才有进步, 目前这个结果才是正确的

总结

实际好像是题主的代码结果会有重复, 四楼答主的结果才是正确的

我的方案--把四楼的代码小改变成并行的

我写的有问题, @用筹兮用严 更新了正确的并行代码, 我的代码就不改了, 方便后面看到的同学参考

直接放码(python3)

from collections import defaultdict

import multiprocessing

def find_sth(x):

with open('1.txt', 'r') as f1:

infile1 = defaultdict(set)

for uno1, chr1, start1, end1, *others in map(str.split, f1):

infile1[chr1].add((uno1, int(start1), int(end1)))

chr, start, end, info = x[0], int(x[3]), int(x[4]), x[-1]

for uno1, start1, end1 in infile1[chr]:

if start1 < start < end1 or start1 < end < end or (start1 > start and end > end1):

print(uno1, info)

def main():

with open('genemark.gff3', 'r') as fh:

lst = [x for x in map(str.split, fh) if x[2] == 'gene']

pool = multiprocessing.Pool(multiprocessing.cpu_count())

pool.map(find_sth, lst)

pool.close()

pool.join()

if __name__ == "__main__":

main()

然后看看运行效率

(py3) [ngs@cluster ~]$ time python hi_new.py > hi_new.txt

real 0m3.033s

user 0m31.952s

sys 0m0.219s

(py3) [ngs@cluster ~]$ wc -l hi_new.txt

4000 hi_new.txt

时间上貌似慢了很多(4000行数据才几百KB), 题主可以试着用你的真实数据测试下, 处理数据越大, 并行处理的效率优势越明显

PS: 我估计题主实际处理的数据大小得有MB甚至是GB级别, 这种级别并行处理才是王道

最后

以上就是潇洒大米为你收集整理的python中if的效率_python优化代码(文本查找)效率?的全部内容,希望文章能够帮你解决python中if的效率_python优化代码(文本查找)效率?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部