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