guest01
http://code.activestate.com/recipes/502199/
Отсюда взял генератор. Одно плохо, полный перебор дает миллиарды комбинаций :) Питон не выдерживает и вылетает с MemoryError.
Вы наверное не генератор взяли, а первую версию, которая не ленивая. Генераторы по определению не могут так себя вести.
Не уверен, что это именно то, что нужно, но может хоть как-то поможет или натолкнет на решение:
import operator
def comb(*sequences):
lengths = [len(seq) for seq in sequences]
range_len_seq = range(len(sequences))
max_count = reduce(operator.mul, lengths)
_tmp = lengths + [1] # append multiplicative identity
dividers = [reduce(operator.mul, _tmp[-x-1:]) for x in range_len_seq][::-1]
modulos = lengths
for n in range(max_count):
yield [sequences[r][(n/dividers[r])%modulos[r]] for r in range_len_seq]
par = {
'-q' : ['0', '1', '2', '3', '4'],
'-w' : ['0', '1'],
'-e' : ['2', '3'],
'-r' : ['1', '2'],
'-f' : ['1 ', '2'],
'-t' : ['1', '2', '4', '8'],
'-d' : ['1', '2', '3', '4', '5', '6'],
}
groupped = [["%s%s" % (key, val) for val in vals] for key,vals in par.iteritems()]
for combination in comb(*groupped):
print combination
Поскольку оно ленивое, то количество комбинаций ему по барабану. Ваш пример породил не миллиарды, а гораздо меньше, но съест оно любое вразумительное количество:
$ time python test.py |wc -l
1920
real 0m0.042s
user 0m0.032s
sys 0m0.004s