【发布时间】:2013-10-20 16:29:56
【问题描述】:
考虑一个 6 位整数
x = a b c d e f
应该转置为三个 2 位整数,如下所示
x1 = a d
x2 = b e
x3 = c f
什么是在 python 中执行此操作的有效方法?
我目前是这样的
bit_list = list( bin(x)[2:] ) # to chop of '0b'
# pad beginning if necessary, to make sure bit_list contains 6 bits
nb_of_bit_to_pad_on_the_left = 6 - len(bit_list)
for i in xrange(nb_of_bit_to_pad_on_the_left):
bit_list.insert(0,'0')
# transposition
transpose = [ [], [], [] ]
for bit in xrange(0, 6, 2):
for dimension in xrange(3):
x = bit_list[bit + dimension]
transpose[dimension].append(x)
for i in xrange(n):
bit_in_string = ''.join(transpose[i])
transpose[i] = int(bit_in_string, 2)
但这在将 5*1e6 位整数转置为一百万个 5 位整数时会很慢。
有没有更好的方法?
或者是什么鬼魔法<</>> 会更快?
这个问题是通过尝试对Skilling Hilbert curve algorithm进行python实现而产生的
【问题讨论】: