当我努力解释这一点时,请多多包涵;我的数学生疏了,我刚开始计算机编程,对不起!
假设我有一个包含 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