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