python中是否有内置函数来转换bool数组(表示字节中的位),如下所示:
p = [True, True, True, False, True, False, False, True]
转换成一个字节数组:
bp = byteArray([233])
我知道哦numpy,但我正在寻找Python本身的东西
xbp102n01#
这将做你想要的:
sum(v << i for i, v in enumerate(p[::-1]))
wgxvkvu92#
用algebra:
sum(2**i for i, v in enumerate(reversed(p)) if v)
iyzzxitl3#
要转换不同基的整数字符串,只需使用具有适当基的int()函数。
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))具有更高的性能!
[1 if i else 0 for i in p]
map
map(int, p)
j2datikz4#
使用int,可以将二进制表示转换为int对象(通过指定基数2):
int
>>> p = [True, True, True, False, True, False, False, True] >>> int(''.join(map(str, map(int, p))), 2) 233
wqsoz72f5#
>>> p = [True, True, True, False, True, False, False, True] >>> int("".join(map(lambda x: x and '1' or '0',p)),2) 233
基数为2的int从二进制给予整数
ahy6op9u6#
我遇到这个问题是因为我想做同样的事情。这是一个X/Y问题:我正在实现一个函数,并认为我想将输入位数组转换为整数。我真正想做的是使用enum内置的IntFlag,而不是我的自定义实现。下面是文档中的标准示例:
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,我可以获得整数值,同时仍然保留每个位表示的有用信息。
6条答案
按热度按时间xbp102n01#
这将做你想要的:
wgxvkvu92#
用algebra:
iyzzxitl3#
要转换不同基的整数字符串,只需使用具有适当基的
int()
函数。这里使用的生成器(
[1 if i else 0 for i in p]
)比map
(map(int, p)
)具有更高的性能!j2datikz4#
使用
int
,可以将二进制表示转换为int
对象(通过指定基数2):wqsoz72f5#
基数为2的int从二进制给予整数
ahy6op9u6#
我遇到这个问题是因为我想做同样的事情。
这是一个X/Y问题:我正在实现一个函数,并认为我想将输入位数组转换为整数。
我真正想做的是使用
enum
内置的IntFlag
,而不是我的自定义实现。下面是文档中的标准示例:
它也以另一种方式工作:
我的用例是位掩码:
使用IntFlag,我可以获得整数值,同时仍然保留每个位表示的有用信息。