Создание массива двоичных записей в python - PullRequest
0 голосов
/ 29 мая 2020

Я хотел бы сгенерировать массив следующим образом:

[[0,0,0],
 [0,0,1],
 [0,1,0],
 [0,1,1],
 [1,0,0],
 [1,0,1],
 [1,1,0]
 [1,1,1]]

Я попытался добиться этого, установив 3 для циклов, но у меня от sh до go далее до 4, 5 и более высокие битовые числа, поэтому последний метод не будет легко масштабироваться до этих чисел.

Есть какой-нибудь простой способ сделать это?

Ответы [ 3 ]

1 голос
/ 29 мая 2020

Я не могу понять, зачем вам это нужно, но вот:

Для 3:

>>> [[int(x) for x in "{0:03b}".format(y)] for y in range(8)]
[[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]
>>>

Для 5:

>>> [[int(x) for x in "{0:05b}".format(y)] for y in range(32)]
[[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], [0, 0, 1, 1, 0], [0, 0, 1, 1, 1], [0, 1, 0, 0, 0], [0, 1, 0, 0, 1], [0, 1, 0, 1, 0], [0, 1, 0, 1, 1], [0, 1, 1, 0, 0], [0, 1, 1, 0, 1], [0, 1, 1, 1, 0], [0, 1, 1, 1, 1], [1, 0, 0, 0, 0], [1, 0, 0, 0, 1], [1, 0, 0, 1, 0], [1, 0, 0, 1, 1], [1, 0, 1, 0, 0], [1, 0, 1, 0, 1], [1, 0, 1, 1, 0], [1, 0, 1, 1, 1], [1, 1, 0, 0, 0], [1, 1, 0, 0, 1], [1, 1, 0, 1, 0], [1, 1, 0, 1, 1], [1, 1, 1, 0, 0], [1, 1, 1, 0, 1], [1, 1, 1, 1, 0], [1, 1, 1, 1, 1]]
>>>

Соответствие вашему форматирование сложнее.

1 голос
/ 29 мая 2020

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

def generate_binary_entries(n, t=[[]]):  # n: length of bit number
    if n == 0:
        return t
    new_t = []
    for entry in t:
        new_t.append(entry + [0])
        new_t.append(entry + [1])
    return generate_binary_entries(n - 1, new_t)

Затем

generate_binary_entries(4)

генерирует

[[0, 0, 0, 0],
 [0, 0, 0, 1],
 [0, 0, 1, 0],
 [0, 0, 1, 1],
 [0, 1, 0, 0],
 [0, 1, 0, 1],
 [0, 1, 1, 0],
 [0, 1, 1, 1],
 [1, 0, 0, 0],
 [1, 0, 0, 1],
 [1, 0, 1, 0],
 [1, 0, 1, 1],
 [1, 1, 0, 0],
 [1, 1, 0, 1],
 [1, 1, 1, 0],
 [1, 1, 1, 1]]
1 голос
/ 29 мая 2020

Для этого можно использовать itertools.product.

>>> import itertools
>>> list(itertools.product([0,1], repeat=3))
[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...