У меня есть следующий список в Python, который содержит 0s.

lst = [0,0,0,0,0]

Я хотел бы создать список, который состоит из списков различных комбинаций 1 и 0. Каждый список будет новой и уникальной комбинацией, и все возможные комбинации можно найти в нем. Это выглядело бы примерно так, если бы было только 3 элемента:

lst = [[0,0,0], [0,0,1], [0,1,0], [1,0,0], [0,1,1], [1,1,0], [1,0,1], [1,1,1]]

Спасибо!

0
JohnyNich 19 Окт 2017 в 10:45

3 ответа

Лучший ответ

Вы можете использовать пакет itertools, он содержит функцию product

from itertools import product
list(product([0,1],repeat=5))

См. https://docs.python.org/3/library/itertools .html # itertools.product

Edit: обратите внимание, что правильное использование некоторых функций из этого пакета может дать ожидаемый результат без создания циклов for. Как говорили другие, трудно понять, что вы хотите точно .

1
Wli 19 Окт 2017 в 08:13

Я не уверен, что вы хотите, но следующее выглядит как ваша потребность.

import numpy as np

lst = [0,0,0,0,0]

tmp = []
for i in range(len(lst)):
    l = np.copy(lst)
    l[i] = 1
    tmp.append(l.tolist())
print(tmp)

[[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]]
0
Lion Lai 19 Окт 2017 в 08:09

Трехбитные комбинации без импорта пакетов:

lst = []  
z = [lst.append(list(format(i,'03b'))) for i in range(0,2**3)]
lst  
[['0', '0', '0'], ['0', '0', '1'], ['0', '1', '0'], ['0', '1', '1'], ['1', '0', '0'], ['1', '0', '1'], ['1', '1', '0'], ['1', '1', '1']]

Для ширины 4 бита измените «03b» на «04b» и установите диапазон (0,2 ** 4)

0
yemiteliyadu 24 Окт 2017 в 03:22