可能的二进制数函数Python

2024-06-26 14:22:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图写一个函数来实现这个功能:返回所有带有N位的二进制数,并按排序顺序排列。每个二进制数表示为一个元组。调用AllBinary(N)的结果是一个包含2^N个二进制数的元组。示例:

AllBinary(2)
[(0, 0), (0, 1), (1, 0), (1, 1)]

我试图使用for或while循环编写函数。这是我的代码:

^{pr2}$

我想我可以用一个累加for循环来解决这个问题,方法是让循环创建二进制的元组,然后将它们添加到空列表c中。但是我不确定如何编写循环代码来获取这些二进制元组。在


Tags: 方法函数代码功能示例列表for排序
3条回答

这叫做动力装置。在

有很多复制和粘贴算法。在

但是,2^n是一个很大的开销+Python的开销(如果我没记错的话,它是每int 12个字节),32个数字将给你每个字节4gb,所以4*12=48gb的内存来存储。在

要知道这个幂集中是否有一个数是不重要的。在

这也是学习发电机和产量的一个很好的借口,因为有限的发电机组是可数的。在

def AllBinary(N):
    import itertools
    return itertools.product((0, 1), repeat=N)

示例:

^{pr2}$

你只需要再加两行就行了

>>> def AllBinary(N):
...     c =[]
...     for i in range(2**N):
...         c.append(tuple((i>>j)&1 for j in reversed(range(N))))
...     return c
... 
>>> AllBinary(3)
[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]

如果您也不喜欢使用按位运算符(虽然效率较低)

^{pr2}$

相关问题 更多 >