Как преобразовать список индексов в двоичное число? - PullRequest
1 голос
/ 28 марта 2019

У меня есть список чисел, которые являются индексами.Я хочу получить двоичное число с битами, установленными в этих индексах в списке.Например,

my_list=[0,2]

Я хочу получить двоичное число, установленное на index 0 and index 2: 101 (or 5 in int)

1 Ответ

1 голос
/ 28 марта 2019

Вы можете использовать сдвиг битов, чтобы установить конкретные биты, и двоичный код или |, чтобы объединить их:

>>> bin(1 << 2)
0b100
>>> bin(1 << 0)
0b1
>>> bin(1 << 0 | 1 << 2)
0b101

Это позволяет устанавливать биты для каждой записи в списке:

>>> result = 0
>>> for position in my_list:
...    result |= 1 << position 
...
>>> bin(result)
0b101

Для больших чисел использование reduce и map может быть быстрее:

>>> from functools import reduce  # loop-augmented-assignment
>>> from operator import __or__  # the | operator
>>>
>>> #         / result |= ...        / 1 << position 
>>> #         v                      v
>>> reduce(__or__, map(lambda pos: 1 << pos, my_list))
5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...