2010-02-24 15 views
5

Estoy tratando de crear una lista posible de codones dada una secuencia de proteínas.Trabajando con itertools.product y listas en python 3

Básicamente, el script que estoy tratando de crear procesará una entrada de cadena dada y generará una posible combinación de otro conjunto de cadenas que representa la entrada.

Por ejemplo, el carácter 'F' representa 'UUU' o 'UUC'; el carácter 'I' representa ya sea 'AUU', 'AUC' o 'AUA'.

Dada la entrada 'FI', el guión que estoy tratando de crear la Salida: 'UUUAUU', 'UUUAUC', 'UUUAUA', 'UUCAUU', 'UUCAUC', y 'UUCAUA'.

Actualmente estoy atascado con este código:

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) 

Funciona cuando sustituyo pool en itertools.product con pool[0], pool[1]. Pero no puedo encontrar la manera de hacerlo funcionar para que el usuario pueda ingresar una cadena con más de 2 caracteres (es decir, no para que tenga un código fijo).

¡Gracias de antemano por la ayuda!

Respuesta

6

Puede utilizar *pool a "descomprimir" la lista al llamar product():

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

Esta sintaxis se amplía la lista pool en parámetros posicionales separados.

2

itertools.product (piscina [0], piscina [1], ... piscina [len (piscina) -1]) es equivalente a itertools.product (* piscina)

import itertools 

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

pool=[F,I] 

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