如何将布尔值列表转换为单个整数,其中每个布尔值都被解释为一个位?



我有一个bool的列表,我想将其转换为单个int。例如:[True, True, False, True, False]-> 010112->11 10

我发现了这个问题:如何将布尔列表转换为 int? 但它是 C# 中的,这对我没有帮助。

我第一次尝试是做

def bools2int(bools):
n = 0
for b in bools[::-1]:
n *= 2
n += b
return n

哪个有效。

但是有没有更python的方法可以做到这一点呢?它可以在一条线上完成吗?

IIUC,使用内置int(x, base=2)

l = [True, True, False, True, False]
def bool2int(bools):
return int(''.join(str(int(i)) for i in reversed(bools)), 2)
bool2int(l)

输出:

11

经过一番乱搞,我发现了这个

sum([b << i for i, b in enumerate(bools)])

我认为这是一个非常pythonic的解决方案。

最新更新