在python中是否有任何构建函数来转换bool数组(表示一个字节中的位),如下所示:
p = [True, True, True, False, True, False, False, True]
进入这样的字节数组:
bp = byteArray([233])
我知道哦numpy但我在python本身寻找的东西
答案 0 :(得分:7)
这将做你想要的:
sum(v<<i for i, v in enumerate(p[::-1]))
答案 1 :(得分:4)
只需使用代数:
sum(2**i for i, v in enumerate(reversed(p)) if v)
答案 2 :(得分:2)
要转换不同基数的整数字符串,只需使用int()
函数即可
适当的基础。
>>> int(''.join('1' if i else '0' for i in p), 2)
233
使用生成器([1 if i else 0 for i in p]
)的性能高于map
(map(int, p)
)!
答案 3 :(得分:1)
使用int
,您可以将二进制表示转换为int
对象(通过指定基数2):
>>> p = [True, True, True, False, True, False, False, True]
>>> int(''.join(map(str, map(int, p))), 2)
233
答案 4 :(得分:0)
>>> p = [True, True, True, False, True, False, False, True]
>>> int("".join(map(lambda x: x and '1' or '0',p)),2)
233
int with base 2给出二进制的整数
答案 5 :(得分:0)
我遇到了这个问题,因为我想做同样的事情。
我的是一个X / Y问题,但是:我正在实现一个函数,并认为我想将输入的位数组转换为整数。
我真正想要做的是使用内置的enum
中的IntFlag
而不是我的自定义实现。
这是文档中的标准示例:
>>> from enum import IntFlag
>>> class Perm(IntFlag):
... R = 4
... W = 2
... X = 1
...
>>> Perm.R | Perm.W
<Perm.R|W: 6>
>>> Perm.R + Perm.W
6
>>> RW = Perm.R | Perm.W
>>> Perm.R in RW
True
它也以另一种方式起作用:
>>> Perm(7)
<Perm.R|W|X: 7>
我的用例是使用位掩码:
class BitMask(IntFlag):
flag1 = 2**0
flag2 = 2**1
flag3 = 2**2
flag4 = 2**3
flag5 = 2**4
# etcetera
使用IntFlag,我可以获得整数值,同时仍然保留每个位代表什么的有用信息。