python 给定K如何表示它的所有二进制数重复问题[重复]

2guxujil  于 2023-06-04  发布在  Python
关注(0)|答案(2)|浏览(108)

此问题已在此处有答案

python convert a binary string to a structure sutiable for bitwise operators(3个答案)
6个月前关闭。
编辑:谢谢大家帮助我理解这个问题以及如何解决它。
我被问到一个我无法解决的问题。
这个问题本质上是。
假设k为1,输出为['0','1'],假设k为2,输出为['00','01','10','11']
所以本质上k表示要表示的二进制值的数量。如果k是3,我们想要一个从0到7的二进制数列表,k是4,我们想要一个从0到16的二进制数列表。
对我来说,我迷失在如何动态编程,所以给出一个数字k,我们得到我们想要的输出。

8yparm6h

8yparm6h1#

由于输出随k呈指数增长,我建议使用可迭代。

from itertools import product

def binary_numbers(k):
    return product('01', repeat=k)

从那里你可以做你需要的。

for x in binary_numbers(3):
    print(''.join(x))

000
001
010
011
100
101
110
111

bwleehnv

bwleehnv2#

这些是具有给定位数的所有数字的二进制表示。因此,迭代这些数字并将其格式化为带有填充零的二进制。您可以使用格式规范mini语言来实现这一点,例如使用f字符串:

def binary_numbers(k):
    return [f"{i:0>{k}b}" for i in range(1 << k)]

如果你应该用递归来做这件事,而不是把数字格式化成二进制,那么可能是这样的:

def binary_numbers(k):
    if k == 0:  # base case
        return [""]
    return [s + dig for s in binary_numbers(k-1) for dig in "01"]

相关问题