我有一个数字列表,它们是索引。我想获得一个二进制数字,该数字在列表中的那些索引处设置。 例如,
my_list=[0,2]
我想在index 0 and index 2: 101 (or 5 in int)
处设置一个二进制数
答案 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
对于大数,使用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