将整数列表转换为二进制数字列表

Convert list of integers into list of binary digits

创建一个函数,将整数列表作为输入,并输出从 integertobinary() 函数获得的二进制数字列表列表。二进制数字列表出现的顺序应与输入整数列表的顺序匹配。

例如,如果函数的输入是 [14,3,8,5],输出应该是 [[1,1,1,0],[1,1],[1,0,0,0],[1,0,1]]

这是我到目前为止所做的:

def integertobinary(L): 
    for n in L:
        y = []
        while(n>0):
            a=n%2
            y.append(a)
            n=n//2
        y.reverse()
    return y

    print(integertobinary([5,6,7,8,9]))

因此,我得到:[1, 0, 0, 1] 而我应该得到 [[1,1,1,0],[1,1],[1,0,0,0],[1,0,1]]。我做错了什么?

原因似乎是您在每次迭代中都清除了 y 的值。您需要创建另一个变量来存储所有值。代码可能是:

def integertobinary(L): 
    y = []
    for n in L:
        z = []
        while(n>0):
            a=n%2
            z.append(a)
            n=n//2
        z.reverse()
        y.append(z)
    return y
print(integertobinary([5,6,7,8,9]))

输出:

[[1, 0, 1], [1, 1, 0], [1, 1, 1], [1, 0, 0, 0], [1, 0, 0, 1]]

在一维列表上执行此操作的另一种方法是:

a=  [14,3,8,5]
bin_list = [list(map(int, list(f"{x:b}"))) for x in a]

输出:

[[1, 1, 1, 0], [1, 1], [1, 0, 0, 0], [1, 0, 1]]

如果您不需要编写二进制转换逻辑,您可以采用更简单的 pythonic 方式来完成此操作。为此,只需使用 python 中的 formatbin 函数即可。 一个例子

def integertobinary(L):
    return [[int(b) for b in format(i, "04b")] for i in L]

正好可以满足您的需求。 "04b" 给出一个二进制格式的值,最多填充 4 个前导零。

print(integertobinary([14, 3, 8, 5]))

给出输出

[[1, 1, 1, 0], [0, 0, 1, 1], [1, 0, 0, 0], [0, 1, 0, 1]]