查找python列表中的项目排列,增加了复杂性
请耐心听我解释;我的数学很生疏,我刚开始电脑编程,对不起 假设我有一个包含3项的列表。我想找到这个列表中所有可能的项目安排,其中每个安排由3个项目组成 接下来,仍然使用我的原始列表,我想找到列表中项目的所有可能安排,除了我只希望安排由两个项目组成 最后,我想再次做同样的事情,除了安排只包括一个项目 所以我期望3!+3!/1! + 3!/2.或总共15项安排。 如果我的列表是[1,2,3],那么代码应该生成:查找python列表中的项目排列,增加了复杂性,python,list,permutation,Python,List,Permutation,请耐心听我解释;我的数学很生疏,我刚开始电脑编程,对不起 假设我有一个包含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, 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模块吗?谢谢你们两个。“这解决了我的问题,我可以看到它是如何完成的。”Ryan,那么你应该接受Roman的回答。单击它旁边的复选框。
def perm(list_to_perm,perm_l,items,out):
if len(perm_l) == items:
out +=[perm_l]
else:
for i in list_to_perm:
if i not in perm_l:
perm(list_to_perm,perm_l +[i],items,out)
a = [1,2,3]
for i in range(1,len(a) +1):
out = []
perm(a,[],i,out)
print out