2016-12-08 4 views
1

Я пытаюсь сделать другую комбинацию K и M. Я использую itertools.product. но повторение принимает только целое число. Я хотел бы составить список комбинаций с разной длиной, включая 6,7,8,9,10,11. Я сделал список необходимой длины и накинут в этом списке, но он дал только все сочетание слов с длиной 11. Вот некоторые строки из моего кода:Повторите аргумент в itertools.product

wd = ['K','M'] 
k1 = [6,7,8,9,10,11] 
for i in k1: 
    motif = [''.join(p) for p in itertools.product(wd, repeat=i)] 

как я могу изменить этот цикл, чтобы получить все комбинации всех длин. поэтому я бы список, как это (конечно, это малая часть того)

results = ["KKKKKK", "KKKKKM", "KKKKMM", ... , "KKKKKKK", "KKKKKKM", "KKKKKMM", ........., "KKKKKKKKKKK", "KKKKKKKKKKKM", "MMMMMMMMMMM"] 

ответ

1

Проблема заключается в перезаписи motif на каждой итерации цикла. Вы должны сделать что-то вроде этого:

wd = ['K','M'] 
k1 = [6,7,8,9,10,11] 
motif = [] 
for i in k1: 
    motif += [''.join(p) for p in itertools.product(wd, repeat=i)] 

Или это:

import itertools 
wd = ['K','M'] 
k1 = [6,7,8,9,10,11] 
motif = [''.join(p) for i in k1 for p in itertools.product(wd, repeat=i)] 

Выход:

['KKKKKK', 'KKKKKM', 'KKKKMK', ..., 'MMMMMMMMMMK', 'MMMMMMMMMMM'] 
Смежные вопросы