これらすべてのバリアントよりも約 2 倍高速です (少なくとも 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(..)
、私のコンピューターの新しいフォーマッターは、最も遅い結果を示します。