返回有效位列表

时间:2014-06-20 09:32:35

标签: python bits

如何获取所有有效位的列表(等于1时的有效位)?

示例:十进制数220为二进制11011100,因此它应返回['2', '3', '4', '6', '7'],因为位0,1和5已关闭。

4 个答案:

答案 0 :(得分:2)

[2:]删除二进制前缀,[::-1]会反转结果

In [5]: [x for x, y in enumerate(bin(220)[2:][::-1]) if y != '0']
Out[5]: [2, 3, 4, 6, 7]

另外,您可以使用[-1:1:-1]作为@jonrsharpe建议:

In [6]: [x for x, y in enumerate(bin(220)[-1:1:-1]) if y != '0']
Out[6]: [2, 3, 4, 6, 7]

答案 1 :(得分:2)

另类脏衬里(没有附加条件):

input_number = 220

print [i for i in xrange(input_number.bit_length()) if ((1 << i) & input_number)]

答案 2 :(得分:1)

肮脏的单行:

print [i for (i,b) in (enumerate(reversed("{0:b}".format(220)))) if int(b)]
# [2, 3, 4, 6, 7]

答案 3 :(得分:1)

使用itertools.compress()

进行一些不同的实现
x=list(map(int,bin(220)[2:]))
print list(compress(range(len(x)-1,-1,-1), x))
#output [7, 6, 4, 3, 2]