>>> def boolList2BinString(lst):
... return '0b' + ''.join(['1' if x else '0' for x in lst])
...
>>> boolList2BinString([True, True, False])
'0b110'
>>>
Run Code Online (Sandbox Code Playgroud)
关于你的第二个,你不能"将二进制字符串转换为二进制文字".顾名思义,文字必须按字面输入:
>>> x = 0b110
>>>
Run Code Online (Sandbox Code Playgroud)
也许你的意思是你想要从输出中删除引号?如果是这样,请使用print:
>>> def boolList2BinString(lst):
... return '0b' + ''.join(['1' if x else '0' for x in lst])
...
>>> boolList2BinString([True, True, False])
'0b110'
>>> print(boolList2BinString([True, True, False]))
0b110
>>>
Run Code Online (Sandbox Code Playgroud)
*注意:我故意选择使用列表推导str.join而不是生成器表达式,因为前者通常更快.
将列表转换为合适的二进制文件(将是一个 long int):
number = reduce(lambda a, b: (a<<1) + int(b), [ True, True, False ])
Run Code Online (Sandbox Code Playgroud)
然后,如果您确实需要一个“二进制字符串”,正如您所说,请使用
bin(number)
Run Code Online (Sandbox Code Playgroud)
生成该字符串。
编辑
您还可以使用此代码:
number = sum(int(bit) << position
for (position, bit) in
enumerate(reversed([True, True, False])))
Run Code Online (Sandbox Code Playgroud)
其背后的机制与之前相同。