2010-02-24 14 views
5

Próbuję stworzyć możliwą listę kodonów podanych w sekwencji białek.Praca z itertools.product i listami w pythonie 3

Zasadniczo skrypt, który próbuję utworzyć, przetworzy dane ciągi wejściowe i wypisze możliwe kombinacje innego zestawu łańcuchów reprezentowanych przez dane wejściowe.

Na przykład znak "F" oznacza "UUU" lub "UUC"; litera "I" oznacza "AUU", "AUC" lub "AUA".

względu na wejście 'FI', skrypt Próbuję utworzyć powinny wyjściowe: 'UUUAUU', 'UUUAUC', 'UUUAUA', 'UUCAUU', 'UUCAUC' i 'UUCAUA'.

jestem obecnie zatrzymany z tego kodu:

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) 

Działa kiedy wymienić pool w itertools.product z pool[0], pool[1]. Ale nie mogę wymyślić, jak to zrobić, aby użytkownik mógł wprowadzić ciąg znaków składający się z więcej niż 2 znaków (to znaczy, aby nie stał się zakodowany).

Z góry dziękujemy za pomoc!

Odpowiedz

6

Można użyć *pool do „rozpakowania” listę Dzwoniąc product():

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

Ta składnia rozszerza listę pool do oddzielnych parametrów pozycyjnych.

2

itertools.product (basen [0], basen [1], ... Basen [len (pula) -1]), jest równoważna itertools.product (* basenu)

import itertools 

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

pool=[F,I] 

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