たとえば、DNA ストリングを考えてみAGC
ます。指定された文字列で最大 #n (ユーザー定義番号) の不一致を許可する、すべての可能な一意の文字列を生成しようとしています。
次の方法で 1 つの不一致に対してこれを行うことができますが、再帰的なソリューションを実装して、#n 不一致、DNA 文字列、および突然変異セット (AGCTN) に基づいて可能なすべての組み合わせを生成することはできません。
temp_dict = {}
sequence = 'AGC'
for x in xrange(len(sequence)):
prefix = sequence[:x]
suffix = sequence[x+1:]
temp_dict.update([ (prefix+base+suffix,1) for base in 'ACGTN'])
print temp_dict
例:
特定のサンプル文字列 : ACGの場合、以下は 13 個の一意のシーケンスであり、最大 1 つの不一致が許容されます
{'ACC': 1, 'ATG': 1, 'AAG': 1, 'ANG': 1, 'ACG': 1, 'GCG': 1, 'AGG': 1,
'ACA': 1, 'ACN': 1, 'ACT': 1, 'TCG': 1, 'CCG': 1, 'NCG': 1}
これを一般化して、プログラムが 100 文字の長さの DNA 文字列を取得し、ユーザー定義の #mismatches を許可する一意の文字列のリスト/dict を返すことができるようにします。
ありがとう!-アビ