python - 如何将索引列表转换为二进制数?
问题描述
我有一个数字列表,它们是索引。我想获得一个二进制数,其中在列表中的这些索引处设置了位。例如,
my_list=[0,2]
我想将二进制数设置为index 0 and index 2: 101 (or 5 in int)
解决方案
您可以使用位移来设置特定位,以及二进制或|
组合它们:
>>> 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
andmap
可能更快:
>>> 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
推荐阅读
- node.js - SyntaxError:意外的令牌
- excel - Excel:跨书,隐式引用所有工作表
- c# - 为数组中的每个项目添加一个按钮
- jasmine - 如何使用 Jasmine 测试 Phaser 3 项目?
- php - 由于警告无法上传我的自定义插件:dirname()
- r - 如何使用 R 对复杂函数进行符号微分
- php - 如何将 php 变量传递到另一个页面而不将其重定向到该页面?
- php - 如何解决:在为访问令牌交换授权代码时,已批准的应用程序得到“客户端身份验证失败” - 仅在服务器上
- reactjs - 将数组传递给道具以创建多个盒子阴影
- prometheus - Prometheus 几分钟后会自动删除警报