python-3.x 布尔数组到整数

uyto3xhc  于 2023-04-22  发布在  Python
关注(0)|答案(6)|浏览(123)

python中是否有内置函数来转换bool数组(表示字节中的位),如下所示:

p = [True, True, True, False, True, False, False, True]

转换成一个字节数组:

bp = byteArray([233])

我知道哦numpy,但我正在寻找Python本身的东西

xbp102n0

xbp102n01#

这将做你想要的:

sum(v << i for i, v in enumerate(p[::-1]))
wgxvkvu9

wgxvkvu92#

用algebra:

sum(2**i for i, v in enumerate(reversed(p)) if v)
iyzzxitl

iyzzxitl3#

要转换不同基的整数字符串,只需使用具有适当基的int()函数。

>>> int(''.join('1' if i else '0' for i in p), 2)
233

这里使用的生成器([1 if i else 0 for i in p])比mapmap(int, p))具有更高的性能!

j2datikz

j2datikz4#

使用int,可以将二进制表示转换为int对象(通过指定基数2):

>>> p = [True, True, True, False, True, False, False, True]
>>> int(''.join(map(str, map(int, p))), 2)
233
wqsoz72f

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从二进制给予整数

ahy6op9u

ahy6op9u6#

我遇到这个问题是因为我想做同样的事情。
这是一个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,我可以获得整数值,同时仍然保留每个位表示的有用信息。

相关问题