2013-05-01 18 views
6

Ho già convertito l'input utente del codice DNA (A,T,G,C) nel codice RNA (A,U,G,C). Questo è stato abbastanza facileFunzionalità simultanea.

RNA_Code=DNA_Code.replace('T','U') 

Ora la prossima cosa che devo fare è convertire il RNA_Code in esso di complimento filamento. Ciò significa che ho bisogno di sostituire A con U, U con A, G con C e C con G, ma tutti simultaneamente.

se dico

RNA_Code.replace('A','U') 
RNA_Code.replace('U','A') 

Converte tutte le Come in noi poi tutti gli Stati Uniti in quanto, ma io sono rimasto con tutto quanto per entrambi.

Ho bisogno di prendere qualcosa come AUUUGCGGCAAA e convertirlo in UAAACGCCGUUU. ?

Tutte le idee su come ottenere questo fatto (3,3)

+0

Utilizzare translate http://pymotw.com/2/string/#functions. –

risposta

10

Utilizzare una tabella di traduzione:

RNA_compliment = { 
    ord('A'): 'U', ord('U'): 'A', 
    ord('G'): 'C', ord('C'): 'G'} 

RNA_Code.translate(RNA_compliment) 

Il str.translate() method prende una mappatura da codepoint (un numero) a carattere di rimpiazzo. Il ord() function ci fornisce un punto di codice per un determinato carattere, facilitando la creazione della mappa.

Demo:

>>> RNA_compliment = {ord('A'): 'U', ord('U'): 'A', ord('G'): 'C', ord('C'): 'G'} 
>>> 'AUUUGCGGCAAA'.translate(RNA_compliment) 
'UAAACGCCGUUU' 
+0

Drat, bastonatemi. (Vedo che hai già usato il collegamento!) – BlackVegetable

+0

@BlackVegetable: Link leggermente diverso, questo è Python 3, ma sì. –

+0

Non dimenticarti di ['str.maketrans'] (http://docs.python.org/3/library/stdtypes.html#str.maketrans) –

5

È possibile utilizzare un dizionario di mapping:

In [1]: dic={"A":"U","U":"A","G":"C","C":"G"} 

In [2]: strs="AUUUGCGGCAAA" 

In [3]: "".join(dic[x] for x in strs) 
Out[3]: 'UAAACGCCGUUU' 
1

Se non hai già utilizza, vi suggerisco di provare Biopython. Ha tutti i tipi di funzioni per gestire i dati biologici, incluso un bellissimo oggetto Seq. C'è una funzione reverse_complement() che fa esattamente quello che stai cercando di fare, e un mucchio in più di cui non avresti mai nemmeno pensato. Dai un'occhiata, è un vero risparmio di tempo.

>>> from Bio.Seq import Seq 
>>> from Bio.Alphabet import generic_dna 
>>> my_dna = Seq("AGTACACTGGT", generic_dna) 
>>> my_dna 
Seq('AGTACACTGGT', DNAAlphabet()) 
>>> my_dna.complement() 
Seq('TCATGTGACCA', DNAAlphabet()) 
>>> my_dna.reverse_complement() 
Seq('ACCAGTGTACT', DNAAlphabet())