Попробуйте itertools.product
с аргументом repeat
:
In [1]: from itertools import product
In [2]: product([True, False], repeat=2)
Out[2]: <itertools.product at 0x1c7eff51b40>
Как вы можете видеть выше, он возвращает итерацию, поэтому оберните его в list()
:
In [3]: list(product([True, False], repeat=2))
Out[3]: [(True, True), (True, False), (False, True), (False, False)]
In [4]: list(product([True, False], repeat=3))
Out[4]:
[(True, True, True),
(True, True, False),
(True, False, True),
(True, False, False),
(False, True, True),
(False, True, False),
(False, False, True),
(False, False, False)]
In [5]: list(product([True, False], repeat=5))
Out[5]:
[(True, True, True, True, True),
(True, True, True, True, False),
(True, True, True, False, True),
(True, True, True, False, False),
(True, True, False, True, True),
...
Он также возвращает список кортежей вместо списка списков, но это подходит для большинства случаев использования и может быть очень легко решено с помощью понимания списка, если списки действительно необходимы:
[list(tup) for tup in mylist]