3

これが私の問題です。環状ペプチドを表すシーケンスがあり、可能なすべてのサブペプチドを生成する関数を作成しようとしています。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を使用しています。

4

3 に答える 3

6

それらをすべて生成する方がおそらく簡単です。

def subpeptides(peptide):
    l = len(peptide)
    looped = peptide + peptide
    for start in range(0, l):
        for length in range(1, l):
            print(looped[start:start+length])

与える:

>>> subpeptides("ABCD")
A
AB
ABC
B
BC
BCD
C
CD
CDA
D
DA
DAB

(印刷する代わりにリストが必要な場合は、に変更print(...)するだけyield ...で、ジェネレーターができます)。

上記のすべては、最初の結合が壊れる可能性のあるさまざまな場所を列挙し、次の結合が 1 つ、2 つ、または 3 つ (この場合) の酸の後に壊れた場合に得られるさまざまな製品を列挙することです. looped「ループを一巡する」というロジックを回避する簡単な方法です。

于 2013-11-01T00:36:23.133 に答える
0

あなたはこれを使うことができます

>>>aa='ABCD'
>>> F=[]
>>> B=[]
>>> for j in range(1,len(aa)+1,1):
for i in range(0,len(aa),1):
    A=str.split(((aa*j)[i:i+j]))
    B=B+A
    C=(B[0:len(aa)*len(aa)-len(aa)+1])

それはあなたに与えます:

C=['A', 'B', 'C', 'D', 'AB', 'BC', 'CD', 'DA', 'ABC', 'BCD', 'CDA', 'DAB' 、 'あいうえお']

これがお役に立てば幸いです。ところで、コースラコースも行っています。もし興味があれば、教えてください。

于 2013-12-05T17:41:17.770 に答える