【问题标题】:How do you append values generated at two different point inside the same for loop如何附加在同一个 for 循环内的两个不同点生成的值
【发布时间】:2015-07-07 16:26:36
【问题描述】:

我正在使用手动方法为 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)

【问题讨论】:

  • 发布问题时,您不必用""" 包围文本。

标签: python for-loop append


【解决方案1】:
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]))

【讨论】:

    【解决方案2】:

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

    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'
    

    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

    【讨论】:

    • 您的代码运行良好。只是从范围的角度进行了微小的更改。 return [''.join(['1' if i in lst else '0' for i in range(lst[0]+1)])] 以便自动处理更大的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    相关资源
    最近更新 更多