Работа с itertools.product и списками в python 3

Я пытаюсь создать возможный список кодонов, учитывая последовательность белка.

В основном сценарий, который я пытаюсь создать, обработает данный строковый вход и производит возможные комбинации другого набора строк, которые представляет вход.

Например, символ '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 символами (т.е. не сделать трудно кодированным).

Заранее спасибо за справку!

6
задан sth 24 February 2010 в 10:36
поделиться

2 ответа

Вы можете использовать * pool для «распаковки» списка при вызове product () :

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

Этот синтаксис расширяет список пул на отдельные позиционные параметры.

7
ответ дан 10 December 2019 в 00:37
поделиться

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))
3
ответ дан 10 December 2019 в 00:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: