生成排列

时间:2014-02-16 15:06:15

标签: python

我需要生成一个变量长度列表,列出n长度元组的所有可能值,每个值为0或1.因此,有2 ^ n个可能的元组。例如,对于n = 3的输入,我的列表应该看起来像

a=[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), 
(1, 1, 1)]

注意:内部元素是否为元组无关紧要,方便时使用列表。如果最终列表没有按照我的例子排序也没关系。我目前可以使用for循环来完成它,但是想知道是否有一些更好,更pythony方法。这是我写的代码。

>>>>newlist=[]
>>>>for i in range(2**n):
          s=bin(i)[2:] #spliced to remove the leading '0b' in the string
          s='0'*(n-len(s))+s #adding extra zeroes to beginning of string
          buffer=tuple(int(i) for i in s)
          newlist.append(buffer)

生成我想要的列表。有什么建议以更好的,单行的方式做到吗?

1 个答案:

答案 0 :(得分:4)

您可以使用itertools.product,就像这样

from itertools import product
print list(product(range(2), repeat = 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)]