假设我有一个列表:
lst = [0, 1, 0, 0]
我怎样才能让 python 将此列表解释为二进制数 0100,以便 2*(0100)
给我 01000
?
我能想到的唯一方法是首先创建一个将“二进制”元素转换为相应整数(以 10 为底)的函数,然后使用 bin() 函数。
有没有更好的办法?
原文由 humble 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设我有一个列表:
lst = [0, 1, 0, 0]
我怎样才能让 python 将此列表解释为二进制数 0100,以便 2*(0100)
给我 01000
?
我能想到的唯一方法是首先创建一个将“二进制”元素转换为相应整数(以 10 为底)的函数,然后使用 bin() 函数。
有没有更好的办法?
原文由 humble 发布,翻译遵循 CC BY-SA 4.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 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
您可以像这样使用 位运算符: