私はPythonを初めて使用し、1つのコードの速度を上げるのに苦労しています。
私は 50 万の DNA 配列を含む辞書を持っています。キーとして配列の識別子を持ち、値として対応する DNA 配列を持っています。これらの配列は、200 から 60k のヌクレオチドを持つ可変長 (CTACTA を含む単なる文字列です...) です。大きなシーケンスの部分文字列である DNA シーケンスを削除する必要があります。
私はこれを書きました:
def remove_subs():
#Create a list of values based on reversed lenght
LISTA=sorted(list(x for x in finaldic.values()), key=len, reverse=True)
LISTA2=[]
for a in range(len(LISTA)):
#run the same list but in opposite direction
for b in range(len(sorted(LISTA,key=len))):
if len(LISTA[b])<len(LISTA[a]):
if LISTA[a].find(LISTA[b])!=-1 or Bio.Seq.reverse_complement(LISTA[a]).find(LISTA[b])!=-1 and LISTA[b]!=LISTA[a]:
LISTA2.append(LISTA[a])
組み込みの .find を使用して反対方向に、DNA シーケンスのみを含むリスト (長さ順) の 2 つの for ループを実行して、これらの部分文字列シーケンスを識別しようとしています。
このコードは完全に機能しますが、そのような量の情報を実行するには時間がかかります。より高速なオプションが存在すると確信しています。
手伝ってくれますか?