比所有这些变体快大约两倍(至少在 python 2.7.2 上)
seq_2 = set()
# Here I use generator. So I escape .append lookup and list resizing
def F(f):
# local memory
local_seq_2 = set()
# lookup escaping
local_seq_2_add = local_seq_2.add
# static variables
linker ='CTGTAGGCACCATCAAT'
linker_range = range(len(linker))
for line in f:
line_1=line[:-1]
for i in linker_range:
if line_1[-i:] == linker[:i]:
local_seq_2_add(line)
yield '>\n' + line_1[:-i] + '\n'
# push local memory to the global
global seq_2
seq_2 = local_seq_2
# here we consume all data
seq_1 = tuple(F(f))
是的,它丑陋且非pythonic,但它是完成这项工作的最快方法。
您还可以使用with open('file.name') as f:
内部生成器升级此代码或添加一些其他逻辑。
注意:这个地方'>\n' + line_1[:-i] + '\n'
- 值得怀疑。在某些机器上,这是连接字符串的最快方法。在某些机器上,最快的方法是 '>\n'%s'\n'%line_1[:-i]
or ''.join(('>\n',line_1[:-i],'\n'))
(当然,在没有查找的版本中)。我不知道什么对你最好。这很奇怪,但'{}'.format(..)
我电脑上的新格式化程序显示最慢的结果。