将整数列表转换为二进制数字列表
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 中的 format
或 bin
函数即可。
一个例子
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]]
创建一个函数,将整数列表作为输入,并输出从 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 中的 format
或 bin
函数即可。
一个例子
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]]