2013-07-08 2 views
-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:]) 

명확하게하기 위해, 내 질문에 어떻게베이스가 다른 기지로 대체되고있다?

답변

1

프린트 문을 코드에 인터리빙하는 것을 고려하면 그 작업이 무엇인지 알 수 있습니다. 알고리즘은 다음과 같습니다.

  • 문자열에서 임의의 색인을 선택하십시오. "위치"로 저장하십시오.
  • 해당 색인의 문자를 "기본"으로 저장하십시오.
  • 'TCAG'목록에서 'base'문자를 빈 문자열로 바꾸고 해당 목록을 'bases'로 저장합니다 (색인 'position'에없는 모든 기본을 포함하도록).
  • "bases"에서 임의의 문자를 선택하고 해당 문자를 "newbase"로 저장하십시오. (그래서 원래 랜덤으로 선택한베이스를 제거한 후에 남은 3 개의베이스 중 하나가됩니다.)
  • "position", "newbase"및 "newbase"를 포함하지 않는 원본 문자열과 세 문자열의 연결을 반환합니다. 'newbase'를 제외한 원래의 문자열.

문자열을 편집하지 않습니다. 두 문자열에서 새로운 문자열을 더한 새 문자열을 생성하고 반환합니다.

+0

이것은 저를 위해 그것을했다.세 번째 요점은 그것을 클릭했다. 고마워. – ghal

0

문자열은 파이썬에서 불변이므로 bases.replace(base, '')에서 반환 된 문자열을 bases으로 다시 지정해야합니다.

bases = bases.replace(base, '') 
+0

나는 코드를 작동하지 않습니다. 나는 방법을 모른다. 특히,'newbase' 행을보십시오. ATTGC 시퀀스가 ​​있다고 가정합니다. 위치 3 (G)가 교체되도록 선택됩니다. 코드가 위치 3이 A, T 또는 C가되도록하는 방법은 무엇입니까? – ghal

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' 

스스로 테스트 지금 가능한 염기의리스트가 돌연변이 만 기초로 감소되었음을 함수 임의로 bases[randint(0, 2)] 하나 개의 기지국을 선택하고, 새로운 시퀀스에 추가한다.

+0

하지만 위의 코드는 작동합니다. 그것은 매번 임의의 기초를 세 개의 다른 기초 중 하나로 대체합니다. – ghal

+0

'newbase = bases [randint (0,2)]는'bases [0 : 3] = 'TCA' '에서 랜덤베이스만을 선택하기 때문에'G'를 대체 할 수 있습니다. 밑줄이 'T'인 다른 위치에서 코드를 시도하면. 나는'T '를 대체하려고 100 번 실행하면'T'를'T'로 바꿀 것이라고 보장합니다. – wflynny

+0

그건 사실이 아니야. 나는 그것을 몇 번 돌렸다. 임의의 기준점이 다른 기준점으로 대체 될 때마다 (즉, A가 A로 대체되지 않음). 그것을 시도하십시오 :'replace_base_randomly_using_names ('ATTGCCGTTAATGCCGTA')' – ghal

관련 문제