これが私の問題です。環状ペプチドを表すシーケンスがあり、可能なすべてのサブペプチドを生成する関数を作成しようとしています。2 つのアミノ酸間の結合が切断されると、サブペプチドが作成されます。たとえば、ペプチド「ABCD」の場合、そのサブペプチドは「A」、「B」、「C」、「D」、「AB」、「BC」、「CD」、「DA」、「ABC」、 「BCD」、「CDA」、「DAB」。したがって、長さ n のペプチドから可能なサブペプチドの量は、常に n*(n-1) になります。それらのすべてがペプチドの部分文字列 ('DA'、'CDA'...) であるとは限らないことに注意してください。
組み合わせを生成するコードを作成しました。ただし、結合していないアミノ酸 (「AC」、「BD」...) など、いくつかの過剰な要素があります。関数が呼び出されるたびにペプチドの長さが異なる可能性があるため、それらをどのように排除できるかについてのヒントはありますか? これが私がこれまでに持っているものです:
def Subpeptides(peptide):
subpeptides = []
from itertools import combinations
for n in range(1, len(peptide)):
subpeptides.extend(
[''.join(comb) for comb in combinations(peptide, n)]
)
return subpeptides
ペプチド「ABCD」の結果は次のとおりです。
['A', 'B', 'C', 'D', 'AB', 'AC', 'AD', 'BC', 'BD', 'CD', 'ABC', 'ABD', 'ACD', 'BCD']
アミノ酸がペプチドの実際の配列を表している場合、アミノ酸の順序は重要ではありません。たとえば、「ABD」は「DAB」の有効な形式です。これは、D と A が環状ペプチドに結合しているためです。
私はPythonを使用しています。