标签:成功 div for 读取 图片 size alt pop use
最近在进行基因组数据处理的时候,需要读取较大数据(2.7G)存入字典中,然后对被处理数据进行字典key值的匹配,在被处理文件中每次读取一行进行处理后查找是否在字典的keys中,以下两段代码的效率差别非常大:
第一段:
if(pos in fre_dist.keys()):
newvalue= fre_dist[pos]
第二段:
if(pos in fre_dist):
newValue=fre_dist[pos]
在处理3万条数据时,第二段代码的速度是第一段代码速度的上千倍。
原因是:第一段代码 fre_dist.keys()变成了list,python在检索list的时候是比较慢的,第二段代码 fre_dist是字典,python在检索字典的时候速度是比较快的。
血的教训。
dict结构,我想大多数人都会想到 for key in dictobj 的方法,确实这个方法在大多数情况下都是适用的。但是并不是完全安全,请看下面这个例子:
其实,这个例子是我简化过的,我是在一个多线程的程序里发现这个问题的,所以,我的建议是:遍历dict的时候,养成使用 for k in d.keys() 的习惯。
不过,如果是多线程的话,这样就绝对安全吗?也不见得:当两个线程都取完d.keys()以后,如果两个线程都去删同一个key的话,先删的会成功,后删的那个肯定会报 KeyError ,这个看来只能通过其他方式来保证了。
另一篇:dict 两种遍历方式的性能对比
关于纠结dict遍历中带括号与不带括号的性能问题
我们可以看出,dict条数在200一下的时候是带括号的性能比较高一点,但是在200条以上的数据后不带括号的执行时间会少些.
字典用花括号({})表示,里面的项成对出现,一个 key 对应一个 value;key 与 value
之间用冒号(:)分隔;不同的项之间用逗号(,)分隔。
Python Shell:
n = {‘username‘:‘zz‘,"password":123} n.keys() dict_keys([‘username‘, ‘password‘]) n.values() dict_keys([‘zz‘, 123]) n.items() dict_items([(‘username‘, ‘zc‘), (‘password‘, 123)]) for (k,v) in n.items(): print("this‘s key:%r" %k) print("this‘s value:%r" %v") this‘s key:‘username‘ this‘s value:‘zc‘ this‘s key:‘password‘ this‘s value:123
zip():就是依次取出每一个数组的元素,然后组合
n = [1,2,3] m = [‘a‘,‘b‘,‘c‘] a = zip(m,n) for i in a: print(i) (‘a‘, 1) (‘b‘, 2) (‘c‘, 3)
n = [1,2,3] m = [‘a‘,‘b‘,‘c‘] a = zip(m,n) for (m,n) in a: print(m,n) a 1 b 2 c 3
range合并:
for i in range(48,58)+range(65,91):
c8=chr(i);
python 字典dict和列表list的读取速度问题, range合并
标签:成功 div for 读取 图片 size alt pop use
原文地址:https://www.cnblogs.com/timxgb/p/8905268.html