Python - 将函数输出定向到集合

时间:2015-03-22 06:29:24

标签: python-3.x

我是python的新手,正在浏览以下代码,该代码接受一个整数,并以二进制值输出1的位置。

def L(encoded_set):
print('{', end = '')
i = 0
if encoded_set:
    while encoded_set % 2 == 0:
        encoded_set //= 2
        i += 1
    print(i, end = '')
    encoded_set //= 2
    i += 1
while encoded_set:
    if encoded_set % 2:
        print(',', i,end = '')
    encoded_set //= 2
    i += 1
print('}')

例如:54的二进制数是110110所以代码将输出:{1,2,4,5}

现在,我需要将此输出定向到一个集合,以便我可以使用单个集合元素。类似X [0] = 1,X [1] = 2,X [2] = 4 和X [3] = 5.我不知道该怎么做。

2 个答案:

答案 0 :(得分:0)

作为一种更优雅的方式,您可以使用bin功能将您的号码转换为binary并使用enumerate和列表理解来返回正确的位置,并返回索引列表:

>>> def pos(num) :
...    return [i for i,j in enumerate(bin(num)[2:],1) if j=='1']
... 
>>> pos(54)
[1, 2, 4, 5]

注意 bin的结果导致数字前导0b,因此您需要循环覆盖二进制数的切片(bin(num)[2:] )。

答案 1 :(得分:0)

我会选择值移位

ones = []
pos = 0
while val:
   if val & 1:
      ones.append(pos)
   pos += 1
   val >>= 1

您的解决方案编号来自第一个非0最重要的位 - 除非MSB的位置已知(是的,您知道,但是您必须为此添加额外的代码),这可能毫无意义。我的解决方案计算相对于LSB的位置。