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

发布于 2025-01-09 03:50:40 字数 536 浏览 0 评论 0原文

创建一个函数,该函数将整数列表作为输入,并输出从 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,1,1, 0],[1,1],[1,0,0,0],[1,0,1]]。我做错了什么?

Create a function that takes as input a list of integers, and which outputs a list of the binary digit lists obtained from your integertobinary() function. The order in which the binary digit lists appear should match the order of the list of input integers.

For example, if the input to your function is [14,3,8,5] the output should be [[1,1,1,0],[1,1],[1,0,0,0],[1,0,1]].

Here is what I have done so far:

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]))

As a result, I am getting: [1, 0, 0, 1] when I am supposed to get [[1,1,1,0],[1,1],[1,0,0,0],[1,0,1]]. What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

盛夏已如深秋| 2025-01-16 03:50:40

原因似乎是您在每次迭代中清除了 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]]

The reason seems to be that you clear the value of y in every iteration. You need to make another variable to store all the values. The code might be:

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]))

Output:

[[1, 0, 1], [1, 1, 0], [1, 1, 1], [1, 0, 0, 0], [1, 0, 0, 1]]
若言繁花未落 2025-01-16 03:50:40

如果您不需要编写二进制转换逻辑,您可以用更简单的 Python 方式来完成此操作。只需使用 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]]

You can do this in a simpler pythonic way, if you don't have a requirement of writing binary conversion logic. Just use the format or bin function in python for this.
An eg.

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

would do the exact need. "04b" gives a binary formatted value with padding upto 4 leading zeroes.

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

gives output

[[1, 1, 1, 0], [0, 0, 1, 1], [1, 0, 0, 0], [0, 1, 0, 1]]
思念绕指尖 2025-01-16 03:50:40

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

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]]

Another way to do this on a 1-D list could be:

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

Output:

[[1, 1, 1, 0], [1, 1], [1, 0, 0, 0], [1, 0, 1]]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文