2010-02-24 7 views
5

Ich versuche, eine mögliche Liste von Codons mit einer Proteinsequenz zu erstellen.Arbeiten mit itertools.product und Listen in Python 3

Im Grunde wird das Skript, das ich erstellen möchte, eine gegebene String-Eingabe verarbeiten und eine mögliche Kombination einer anderen Menge von Strings ausgeben, die die Eingabe repräsentiert.

Zum Beispiel steht das Zeichen 'F' entweder für 'UUU' oder 'UUC'; das Zeichen "I" steht entweder für "AUU", "AUC" oder "AUA".

der Eingang 'FI' Da, das Skript, das ich ausgeben sollte erstellen bin versucht: 'UUUAUU', 'UUUAUC', 'UUUAUA', 'UUCAUU', 'UUCAUC' und 'UUCAUA'.

bin ich zur Zeit mit diesem Code fest:

import itertools 

F = ['UUU', 'UUC'] 
I = ['AUU', 'AUC', 'AUA'] 

seq, pool = 'FI', [] 

for i in seq: 
    pool.append(eval(i)) 

for n in itertools.product(pool): 
    print(n) 

Es funktioniert, wenn ich pool in itertools.product mit pool[0], pool[1] ersetzen. Aber ich kann nicht herausfinden, wie es funktioniert, damit der Benutzer eine Zeichenfolge mit mehr als 2 Zeichen eingeben kann (d. H. Nicht fest codieren).

Vielen Dank im Voraus für die Hilfe!

Antwort

6

können Sie *pool verwenden, um "entpacken", um die Liste, wenn product() Aufruf:

for n in itertools.product(*pool): 
    print(n) 

Diese Syntax erweitert die Liste pool in separate Positionsparameter.

2

itertools.product (pool [0], pool [1], ... pool [len (Pool) -1]) zu itertools.product äquivalent ist (* Pool)

import itertools 

F = ['UUU', 'UUC'] 
I = ['AUU', 'AUC', 'AUA'] 

pool=[F,I] 

for n in itertools.product(*pool): 
    print(''.join(n))