我想使用unpack()
模块将struct
整数解析为真值列表。
我目前的做法是:
>>> [bool(int(_)) for _ in ("%8s" % str(bin(235)).split("b")[1]).replace(" ","0")]
[True, True, True, False, True, False, True, True]
它完成了这项工作,但却非常令人费解。任何人都有优雅和 pythonesque 的方式做同样的事情?
请注意,上面仅仅是一个示例,并且位掩码不一定只有8位长,但解决方案应该适用于任意长度的位掩码(实际上,使用4的倍数可能没问题)< / p>
答案 0 :(得分:3)
算法优雅,没有C风格的程序主义:
size = 8
[bool(235 & (1 << size - i - 1)) for i in xrange(size)]
答案 1 :(得分:1)
怎么样:
>>> masklen = 8
>>> [bool(int(i)) for i in str(bin(235))[2:].rjust(masklen, '0')]
[True, True, True, False, True, False, True, True]
答案 2 :(得分:0)
因此,如果您跳过pack
步骤并使用整数:
def bitboollist(v,n=0):
l = []
t = v
while t != 0:
l.append(bool(t % 2))
t = t / 2
l.reverse()
if len(l) == 0:
l = [False]
if n > len(l):
l = [False]*(n-len(l)) + l
return l
在示例1234
上使用它会产生:
>>> bitboollist(1234)
[True, False, False, True, True, False, True, False, False, True, False]
>>> bitboollist(1234,n=16)
[False, False, False, False, False, True, False, False, True, True, False, True, False, False, True, False]