生成排列[重复]

Posted

技术标签:

【中文标题】生成排列[重复]【英文标题】:Generating permutations [duplicate] 【发布时间】:2014-03-15 19:05:46 【问题描述】:

我需要生成一个可变长度列表,列出一个 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 循环来做到这一点,但想知道是否有更好、更 Python 的方法。这是我写的代码。

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

这会生成我想要的列表。有什么建议可以更好的单行方式吗?

【问题讨论】:

从标题上看,itertools 就是你的朋友。 我刚才得到的答案很清楚地证明了这一点:) 【参考方案1】:

你可以使用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)]

【讨论】:

哇。我不知道这甚至存在。非常感谢。需要阅读 itertools 模块。我会尽快接受它:D

以上是关于生成排列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

通过重复生成所有排列

生成具有重复元素的列表排列

生成排列[重复]

生成JavaScript数组的排列[重复]

使用 numpy 生成数组排列的长列表(重复)

带重复的全排列问题