将4位整数转换为布尔列表

6

我有一个整数,我知道它的值在0到15之间,即可以用4位表示。我希望将该数组的位表示作为布尔数组获取,即,

0: [False, False, False, False],
1: [True, False, False, False],
2: [False, True, False, False],
# [...]
15: [True, True, True, True]

我该如何最好地实现这一目标?
5个回答

15

通过将格式设置为二进制:

def int_to_bool_list(num):
   bin_string = format(num, '04b')
   return [x == '1' for x in bin_string[::-1]]

或位与:

def int_to_bool_list(num):
    return [bool(num & (1<<n)) for n in range(4)]

第一个函数要求将bin_string内容反转(使用[::-1]),因为字符串格式化按照我们阅读数字的方式格式化数字 - 首先是最高有效位,而问题要求以最低有效位为顺序。


1
使用列表推导式的方式:
my_int = 3
[b == '1' for b in bin(my_int)[2:].rjust(4)[::-1]]  # Convert, pad and reverse

输出:

[True, True, False, False]
   1     2     4      8     = 3

0

试一下:

Bitmasks = []
Bitmasks.append(int("0001", 2))
Bitmasks.append(int("0010", 2))
Bitmasks.append(int("0100", 2))
Bitmasks.append(int("1000", 2))

myNumber = 12
Bools = []
for bm in Bitmasks:
    Bools.append(myNumber|bm==myNumber)

0
R = 16
list = []
print bin(R)[2:]
for i in bin(R)[2:]:
    if (i=="1"):
        list.append(True)
    else:    
        list.append(False)


print list

点击此处以输出

[True, False, False, False, False]

-2
x = 7
strBin = str(bin(x))
lsBoolVal = [i == '1' for i in strBin[2:].zfill(4)]

是的,我已经检查过了。 - Mangu Singh Rajpurohit
1
你仍然应该检查它;即使你在这里提供了示例,它的工作效果也不是很好;你必须返回4位,并且使用 x=7 在这里只返回了三位。 - Thomas Baruchel
这一次看起来能够运行了!但是你为什么说“不行”?你尝试了好几次,每次我都注意到你代码中有些错误;即使是最初的版本也因为语法错误而无法工作(这就是我问你是否已经尝试过你的代码,显然不是这样的原因);第二次我告诉你,当你运行提供的完全相同的代码时,你的函数返回了三位,因为事实确实如此。既然你已经解决了问题,为什么还要说“不行”呢?我很高兴你能够解决这个问题;我们都在这里互相帮助。谢谢。 - Thomas Baruchel
我是说现在没有错误。但我认为你现在必须标记我的答案以便删除,因为它会误导其他人认为我的当前答案是错误的,而这并不是现在的情况,或者你必须撤销你的反对票。 - Mangu Singh Rajpurohit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接