如何获取所有有效位的列表(等于1时的有效位)?
示例:十进制数220
为二进制11011100
,因此它应返回['2', '3', '4', '6', '7']
,因为位0,1和5已关闭。
答案 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)
x=list(map(int,bin(220)[2:]))
print list(compress(range(len(x)-1,-1,-1), x))
#output [7, 6, 4, 3, 2]