-1
from random import randint

def replace_base_randomly_using_names(base_seq):
    """Return a sequence with the base at a randomly selected position of base_seq
    replaced by a base chosen randomly from the three bases that are not at that
    position."""
    position = randint(0, len(base_seq) - 1) # −1 because len is one past end
    base = base_seq[position]
    bases = 'TCAG'
    bases.replace(base, '') # replace with empty string!
    newbase = bases[randint(0,2)]
    beginning = base_seq[0:position] # up to position
    end = base_seq[position+1:] # omitting the base at position
    return beginning + newbase + end

これは、突然変異をシミュレートすることになっています。Doctypeが言及しているように、ベースが実際に変更されることを保証するために、(TCAG内から)異なるベースがどのように選択されるのかわかりません。

編集:

同じことを行う上記のコードの別のバージョン:

def replace_base_randomly(base_seq):
    position = randint(0, len(base_seq) - 1)
    bases = 'TCAG'.replace(base_seq[position], '')
    return (base_seq[0:position] +
            bases [randint(0,2)] +
            base_seq[position+1:])

明確にするために、私の質問は、ベースがどのように別のベースに置き換えられているのですか?

4

3 に答える 3

1

print ステートメントをコードにインターリーブすることを検討すると、それが何をしているかがわかります。アルゴリズムは次のとおりです。

  • 文字列内のランダム インデックスを選択します。「位置」として保存します。
  • そのインデックスの文字を「ベース」として保存します。
  • リスト「TCAG」で、文字「base」を空の文字列に置き換え、そのリストを「bases」として保存します(したがって、インデックスの「位置」にあるものではないすべての塩基が含まれます)。
  • 「bases」からランダムな文字を選択し、その文字を「newbase」として保存します。(つまり、最初にランダムに選んだベースを削除した後に残る 3 つのベースのうちの 1 つになります。)
  • 3 つの文字列の連結を返します。「position」、「newbase」までの元の文字列、および「newbase」に続くが含まれない元の文字列。

文字列を編集するのではなく、古い文字列の 2 つの部分と新しいベースから新しい文字列を作成し、それを返します。

于 2013-07-08T22:46:43.283 に答える
0

bases.replace(base, '')は実際にはbases文字列を変更しません。文字列を変更するにはbases、 を設定する必要がありますbases = bases.replace(base, '')。自分でテストする

bases = 'ACGT'
base = 'A'
print bases #prints 'ACGT'
bases.replace(base, '')
print bases #prints 'ACGT'
bases = bases.replace(base, '')
print bases #prints 'CGT'

ここから、可能性のある塩基のリストが突然変異である塩基のみに削減されたので、関数はランダムに 1 つの塩基を選択しbases[randint(0, 2)]、それを新しいシーケンスに追加します。

于 2013-07-08T21:54:14.057 に答える
0

bases.replace(base, '')Python では文字列は不変です。返された文字列を に再割り当てする必要がありますbases

bases = bases.replace(base, '')
于 2013-07-08T21:15:46.737 に答える