Генерировать все комбинации нуклеотидных k-мер между диапазонами (i, j)
Мне нужно сгенерировать список всех возможных комбинаций нуклеотидов длиной от 5 до 15.
nucleotides = ['A', 'T', 'G', 'C']
Ожидаемые результаты:
AAAAA
AAAAT
AAAAC
AAAAG
AAATA
AAATT
...
AAAAAAAAAAAAAAA
AAAAAAAAAAAAAAT
etc.
Я попробовал:
for i in range(5,16):
for j in itertools.permutations(nucleotides, i):
print j
Но это не работает, если len(nucleotides) < i
.
Заранее спасибо!
3 ответа:
Если вы хотите найти все комбинации, вы должны использовать
.product()
как.permutations()
не будет производить повторяющиеся нуклеотиды, такие какAAAAA
илиAATGC
в любом случае. Попробуйте это:for i in range(5, 16): combinations = itertools.product(*itertools.repeat(nucleotides, i)) for j in combinations: print(j)
Update: как упоминал @JaredGoguen, аргумент
repeat
также может быть использован здесь:combinations = itertools.product(nucleotides, repeat=i)
Чтобы дополнить ответ Сельчука, вот один лайнер, который производит итерацию.
from itertools import chain, product chain(product(nucleotides, repeat=i) for i in range(5, 16))
Другой способ генерации-использование combinations_with_replacement(), который позволяет повторять:
import itertools result=set() nucleotides = ['A', 'T', 'G', 'C'] for i in range(5,16): for j in itertools.combinations_with_replacement(nucleotides, i): print(''.join(j))
Затем вы можете переставить их дальше, чтобы получить все вариации следующим образом:
import itertools result=set() nucleotides = ['A', 'T', 'G', 'C'] for i in range(5,16): for j in itertools.combinations_with_replacement(nucleotides, i): for k in itertools.permutations(j): result.add(''.join(k)) for i in result: print(i)