Я пытаюсь создать возможный список кодонов, учитывая последовательность белка.
В основном сценарий, который я пытаюсь создать, обработает данный строковый вход и производит возможные комбинации другого набора строк, которые представляет вход.
Например, символ 'F' представляет или 'UUU' или 'UUC'; символ 'I' представляет или 'AUU', 'AUC' или 'AUA'.
Учитывая вход 'FI', сценарий, который я пытаюсь создать, должен произвести: 'UUUAUU', 'UUUAUC', 'UUUAUA', 'UUCAUU', 'UUCAUC' и 'UUCAUA'.
Я в настоящее время застреваю с этим кодом:
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)
Это работает, когда я заменяю pool
в itertools.product
с pool[0], pool[1]
. Но я не могу выяснить, как заставить его работать так, чтобы пользователь мог ввести строку больше чем с 2 символами (т.е. не сделать трудно кодированным).
Заранее спасибо за справку!
Вы можете использовать * pool
для «распаковки» списка при вызове product ()
:
for n in itertools.product(*pool):
print(n)
Этот синтаксис расширяет список пул
на отдельные позиционные параметры.
itertools.product (pool [0], pool [1], ... pool [len (pool) -1]) эквивалентен itertools. product (* pool)
import itertools
F = ['UUU', 'UUC']
I = ['AUU', 'AUC', 'AUA']
pool=[F,I]
for n in itertools.product(*pool):
print(''.join(n))