将列表的元素转换为二进制

新手上路,请多包涵

假设我有一个列表:

 lst = [0, 1, 0, 0]

我怎样才能让 python 将此列表解释为二进制数 0100,以便 2*(0100) 给我 01000

我能想到的唯一方法是首先创建一个将“二进制”元素转换为相应整数(以 10 为底)的函数,然后使用 bin() 函数。

有没有更好的办法?

原文由 humble 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

您可以像这样使用 位运算符

 >>> lst = [0, 1, 0, 0]
 >>> bin(int(''.join(map(str, lst)), 2) << 1)
'0b1000'

原文由 styvane 发布,翻译遵循 CC BY-SA 3.0 许可协议

接受的答案,加入一个字符串,并不是最快的。

 import random

lst = [int(i < 50) for i in random.choices(range(100), k=100)]

def join_chars(digits):
    return int(''.join(str(i) for i in digits), 2)

%timeit join_chars(lst)
13.1 µs ± 450 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

def sum_digits(digits):
    return sum(c << i for i, c in enumerate(digits))

%timeit sum_digits(lst)
5.99 µs ± 65.5 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

所以 bit-banging sum_digits() 首先 是 x2 倍!

原文由 ankostis 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题