Как преобразовать список индексов в двоичное число?

#python #list #binary

#python #Список #двоичный

Вопрос:

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

 my_list=[0,2]
  

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

Ответ №1:

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

 >>> 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
  

Комментарии:

1. Большое вам спасибо @MisterMiyagi.

2. Пожалуйста, примите ответ как правильный, если он решил вашу проблему.