如何使用python从int获取每个xbit

2024-09-24 06:21:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从int中得到每个x位,并将这些x位映射到一个列表中,这样我们就有了一个包含32/x元素的列表。你知道吗

例如,数字0xFEBA1234每4位提取一次,结果是[15,14,11,10,1,2,3,4]。你知道吗

一般我们可以这样写函数

def get_xbits_list(num, x):
    result = []
    mask = 2**x - 1

    for i in xrange(32/x):
       result.append((num >> (i * x)) & mask)

    result.reverse()
    return result

问题是:

有什么简单的方法可以重写这个函数在一个或两个地图或其他地图函数行。你知道吗


Tags: 函数in元素列表forgetdef地图
2条回答

是的,有一个较短的方法(使用列表理解):

def get_xbits_list(num, x):
    mask = 2**x - 1
    return [(num >> (i * x)) & mask for i in reversed(xrange(32/x))]

如果您真的想使用map

def get_xbits_list(num, x):
    mask = 2**x - 1
    return map(lambda i: (num >> (i * x)) & mask, reversed(xrange(32/x)))
>>> def get_xbits_list(num, x):
...     mask = 2**x - 1
...     return list(reversed([(num >> (i * x)) & mask for i in xrange(32//x)]))
>>> get_xbits_list(0xFEBA1234, 4)
[15L, 14L, 11L, 10L, 1L, 2L, 3L, 4L]

注意,我将32/x更改为32//x,以显式指定楼层划分,因为^{} returns a float in Python 3。你知道吗

相关问题 更多 >