如何将索引列表转换为二进制数?

时间:2019-03-28 05:56:02

标签: python list binary

我有一个数字列表,它们是索引。我想获得一个二进制数字,该数字在列表中的那些索引处设置。 例如,

my_list=[0,2]

我想在index 0 and index 2: 101 (or 5 in int)处设置一个二进制数

1 个答案:

答案 0 :(得分: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

对于大数,使用reducemap可能会更快:

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