@Akavall 建议的最简单的方法是最快的。下面针对 mult_add_xor 的额外时序表明,python 中的位操作较慢,因为简单的加法“+ bit”比 xor “| bit”快,并且乘以 2 比移位“
import timeit
bit_list = [1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
def mult_and_add(bit_list):
output = 0
for bit in bit_list:
output = output * 2 + bit
return output
def mult_and_xor(bit_list):
output = 0
for bit in bit_list:
output = output * 2 | bit
return output
def shifting(bitlist):
out = 0
for bit in bitlist:
out = (out << 1) | bit
return out
n = 1000000
a1 = mult_and_add(bit_list)
a2 = mult_and_xor(bit_list)
a3 = shifting(bit_list)
print('a1: ', a1, ' a2: ', a2, ' a3: ', a3)
assert a1 == a2 == a3
t = timeit.timeit('convert(bit_list)',
'from __main__ import mult_and_add as convert, bit_list',
number=n)
print("mult and add method time is : {} ".format(t))
t = timeit.timeit('convert(bit_list)',
'from __main__ import mult_and_xor as convert, bit_list',
number=n)
print("mult and xor method time is : {} ".format(t))
t = timeit.timeit('convert(bit_list)',
'from __main__ import shifting as convert, bit_list',
number=n)
print("shifting method time is : {} ".format(t))
输出:
a1: 49280 a2: 49280 a3: 49280
mult and add method time is : 0.9469406669959426
mult and xor method time is : 1.0905388034880161
shifting method time is : 1.2844801126047969