首页 > 解决方案 > 如何将索引列表转换为二进制数?

问题描述

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

my_list=[0,2]

我想将二进制数设置为index 0 and index 2: 101 (or 5 in int)

标签: pythonlistbinary

解决方案


您可以使用位移来设置特定位,以及二进制或|组合它们:

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

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

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

推荐阅读