Bool数组为整数

时间:2014-11-27 07:50:34

标签: python python-3.x

在python中是否有任何构建函数来转换bool数组(表示一个字节中的位),如下所示:

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

进入这样的字节数组:

bp = byteArray([233])

我知道哦numpy但我在python本身寻找的东西

6 个答案:

答案 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])的性能高于mapmap(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,我可以获得整数值,同时仍然保留每个位代表什么的有用信息。