【发布时间】:2012-06-14 20:17:57
【问题描述】:
在我难以解释的时候请多多包涵;我的数学生疏了,我刚开始电脑编程,对不起!
假设我有一个包含 3 个项目的列表。我想在此列表中找到所有可能的项目排列,其中每个排列由 3 个项目组成。
接下来,仍然使用我的原始列表,我想找到列表项的所有可能排列,除了我只希望排列由两个项目组成。
最后,我想再次做同样的事情,除了安排只包含一项。
所以我期待 3! + 3!/1! + 3!/2!,或总共 15 个安排。 只是为了明确说明我想要什么,如果我的列表是 [1, 2, 3],那么代码应该产生:
1, 2, 3
1, 3, 2
2, 1, 3
2, 3, 2
3, 1, 2
3, 2, 1
1, 2
1, 3
2, 1
2, 3
3, 1
3, 2
1
2
3
我在下面写的代码可以做我上面写的,但只适用于长度为 3 的列表。我可以通过添加额外的“for”循环和“elif”语句来修改代码以处理更大长度的列表,但是我觉得必须有一种方法来概括这种模式。我应该怎么做才能获得上述类型的任意长度列表的排列?
我认为我详尽的枚举方法可能会使这比它需要的更复杂......将尝试考虑其他方法并在找到解决方案时更新。
def helperFunction(itemsList):
fullPermutationsOutputList = []
def fullPermutations(itemsList, iterations):
for item1 in itemsList:
if iterations == 2:
if len([item1]) == len(set([item1])):
fullPermutationsOutputList.append((item1,))
else:
for item2 in itemsList:
if iterations == 1:
if len([item1, item2]) == len(set([item1, item2])):
fullPermutationsOutputList.append((item1, item2))
else:
for item3 in itemsList:
if iterations == 0:
if len([item1, item2, item3]) == len(set([item1, item2, item3])):
fullPermutationsOutputList.append((item1, item2, item3))
if iterations == 0:
fullPermutations(itemsList, iterations + 1)
elif iterations == 1:
fullPermutations(itemsList, iterations + 1)
fullPermutations(itemsList, 0)
return fullPermutationsOutputList
【问题讨论】:
-
你看过itertools模块吗? docs.python.org/library/itertools.html
标签: python list permutation