【问题标题】:How to convert a list of boolean to a single int where each boolean is interpreted as a bit?如何将布尔值列表转换为单个 int,其中每个布尔值都被解释为位?
【发布时间】:2020-01-08 21:54:39
【问题描述】:

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

我发现了这个问题:How do I convert a boolean list to int?,但它在 C# 中,这对我没有帮助。

我的第一次尝试是做

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

哪个有效。

但是有没有更多的 pythonic 方法来做到这一点?可以一行完成吗?

【问题讨论】:

  • 您的 bools2int 函数返回 52,而不是 11。这使得猜测您真正想要做什么几乎是不可能的。尝试更仔细的解释,用清晰的例子?
  • 所以你的意图是输入是二进制表示中的位列表,最低有效位在前?如果是这样,那很好,但是您的 bools2int 根本没有实现这一点,所以这个问题本质上仍然很困惑。
  • 很抱歉,我修复了这个功能,它应该可以按预期工作。

标签: python list type-conversion int boolean


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    经过一番折腾,我找到了这个

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

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

    【讨论】:

      猜你喜欢
      • 2012-02-25
      • 1970-01-01
      • 2015-09-27
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      相关资源
      最近更新 更多