Мы можем использовать две функции из стандартного модуля itertools
для генерации комбинаций.Мы используем combinations_with_replacement
для построения 3 пар из SNP.
from itertools import combinations_with_replacement
def pairs(alleles):
return [u + v for u, v in combinations_with_replacement(alleles, 2)]
print(pairs('TA'))
output
['TT', 'TA', 'AA']
Затем мы используем product
для построения всех комбинаций из списка SNP.
from itertools import combinations_with_replacement, product
def pairs(alleles):
return [u + v for u, v in combinations_with_replacement(alleles, 2)]
all_snps = ('AT', 'CG', 'TA')
for t in product(*[pairs(snp) for snp in all_snps]):
print(t)
output
('AA', 'CC', 'TT')
('AA', 'CC', 'TA')
('AA', 'CC', 'AA')
('AA', 'CG', 'TT')
('AA', 'CG', 'TA')
('AA', 'CG', 'AA')
('AA', 'GG', 'TT')
('AA', 'GG', 'TA')
('AA', 'GG', 'AA')
('AT', 'CC', 'TT')
('AT', 'CC', 'TA')
('AT', 'CC', 'AA')
('AT', 'CG', 'TT')
('AT', 'CG', 'TA')
('AT', 'CG', 'AA')
('AT', 'GG', 'TT')
('AT', 'GG', 'TA')
('AT', 'GG', 'AA')
('TT', 'CC', 'TT')
('TT', 'CC', 'TA')
('TT', 'CC', 'AA')
('TT', 'CG', 'TT')
('TT', 'CG', 'TA')
('TT', 'CG', 'AA')
('TT', 'GG', 'TT')
('TT', 'GG', 'TA')
('TT', 'GG', 'AA')