2010-02-24 4 views
5

J'essaye de créer une liste possible de codons donnés une séquence de protéine.Travailler avec itertools.product et les listes en python 3

Fondamentalement, le script que j'essaie de créer traitera une entrée de chaîne donnée et sortira des combinaisons possibles d'un autre ensemble de chaînes que l'entrée représente. Par exemple, le caractère «F» représente «UUU» ou «UUC»; le caractère 'I' représente 'AUU', 'AUC' ou 'AUA'.

Compte tenu de l'entrée 'FI', le script que je suis en train de créer une sortie devrait: 'UUUAUU', 'UUUAUC', 'UUUAUA', 'UUCAUU', 'UUCAUC' et 'UUCAUA'.

Je suis actuellement coincé avec ce code:

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) 

Il fonctionne quand je remplacerai pool à itertools.product avec pool[0], pool[1]. Mais je ne peux pas comprendre comment le faire fonctionner afin que l'utilisateur puisse entrer une chaîne avec plus de 2 caractères (c'est-à-dire ne pas le rendre codé en dur).

Merci d'avance pour l'aide!

Répondre

6

Vous pouvez utiliser *pool à « déballer » la liste lors de l'appel product():

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

Cette syntaxe élargit la liste pool dans les paramètres de position séparés.

2

itertools.product (piscine [0], piscine [1], ... piscine [len (piscine) -1]) est équivalente à itertools.product (* piscine)

import itertools 

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

pool=[F,I] 

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