2

我试图通过提供这些可能列表的长度来获得一个包含所有可能性的二进制列表,现在我找到了一个解决方案,但在其他功能中使用它并不是很方便。

示例:我想要一个列表列表,每个列表代表一个四位数的二进制选项。

如果长度为 4,则结果应如下所示。

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

我所做的是通过以下代码:

>>> [[a, b, c, d] for a in [0,1] for b in [0,1] for c in [0,1] for d in [0,1]]

现在,我正在寻找一种方法,通过知道每个成员二进制列表的长度,我们可以生成大列表,而无需手动输入 [a, b, c, d] ,所以如果可以通过 a 生成列表函数让我们说 L_set(4) 我们得到上面的列表。如果我们输入 L_set(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]]

通过输入 L_set(2) 我们得到:

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

等等。

花了几个小时后,我觉得在这一点上卡住了,我希望你们中的一些人能提供帮助。

谢谢

4

4 回答 4

6

看起来像一份工作itertools.product

>>> import itertools
>>> n = 4
>>> list(itertools.product((0,1), repeat=n))
[(0, 0, 0, 0), (0, 0, 0, 1), (0, 0, 1, 0), (0, 0, 1, 1), (0, 1, 0, 0), (0, 1, 0, 1), (0, 1, 1, 0), (0, 1, 1, 1), (1, 0, 0, 0), (1, 0, 0, 1), (1, 0, 1, 0), (1, 0, 1, 1), (1, 1, 0, 0), (1, 1, 0, 1), (1, 1, 1, 0), (1, 1, 1, 1)]
于 2013-07-16T16:45:18.537 回答
3

我认为itertools标准库中的模块可以提供帮助,尤其是product功能。

http://docs.python.org/2/library/itertools.html#itertools.product

for x in itertools.product( [0, 1] , repeat=3 ):
    print x

 (0, 0, 0)
 (0, 0, 1)
 (0, 1, 0)
 (0, 1, 1)
 (1, 0, 0)
 (1, 0, 1)
 (1, 1, 0)
 (1, 1, 1)

repeat参数是输出中每个组合的长度

于 2013-07-16T16:53:12.147 回答
0

如果你知道长度是n,那么试试这个:

[list(bin(i)[2:]) for i in xrange((2**n)-1)]
于 2013-07-16T16:45:35.067 回答
0
In [12]: list(product(range(2), repeat=2)
Out[12]: [(0, 0), (0, 1), (1, 0), (1, 1)]
于 2013-07-16T16:46:08.837 回答