Разве они не выглядят как битовые комбинации (0000 .... 1111), то есть двоичные биты.И все возможные комбинации n двоичных битов будут варьироваться от 0 до 2 ** n -1
noOfBits = 5
for n in range(2**noOfBits):
binVal = bin(n)[2:].zfill(noOfBits)
b = [ x for x in binVal]
print b
Нужна ли нам для этого комбинаторика?
Вывод:
['0', '0', '0', '0', '0']
['0', '0', '0', '0', '1']
['0', '0', '0', '1', '0']
['0', '0', '0', '1', '1']
['0', '0', '1', '0', '0']
['0', '0', '1', '0', '1']
.......