如何在同一个for循环中追加在两个不同点生成的值

时间:2015-04-28 17:17:24

标签: python for-loop append

我使用手动方法为Eg中的定义值生成二进制数:([6,4,2,0])。

下面的代码将高位(1)写入输入中提到的位置,并将低位写入输入中未提及的位置。例如:one_bits([6,4,2,0])将给出1010101,这意味着第6,第4,第2和第0位为高,其余为低(0)。

以下代码倾向于按顺序生成输出,而不是根据需要生成输出([1010101])。这里,输出在同一for循环中的两个不同点处生成。任何人都可以帮助我吗?

Please refer to this link

def one_bits(x,lst=None):
    if lst == None:
        toplevel = True
        lst = []
    else:
         toplevel = False
    for i in range(0,x[0]+1):
        if i in x:
            print 1
            lst.append(i)
        else:
             print 0
             lst.append(i)

2 个答案:

答案 0 :(得分:2)

def one_bits(lst=None):
    return sum(2**i for i in lst)

也许

print one_bits([6,4,2,0])
print bin(one_bits([6,4,2,0]))

答案 1 :(得分:0)

这将为您提供问题中指定的输出,或尽可能接近它。请注意,无论您使用bin函数还是下面的函数,都会得到str(或str中的list)。

def one_bits(lst=None):
    return ''.join(['1' if i in lst else '0' for i in range(8)])

>>> print one_bits([6,4,2,0])
'10101010'

OR

def one_bits(lst=None):
    return [''.join(['1' if i in lst else '0' for i in range(8)])]

>>> print one_bits([6,4,2,0])
['10101010']

如果您执行int('10101010', 2),则会看到170