Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找python列表中的项目排列,增加了复杂性_Python_List_Permutation - Fatal编程技术网

查找python列表中的项目排列,增加了复杂性

查找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

请耐心听我解释;我的数学很生疏,我刚开始电脑编程,对不起

假设我有一个包含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模块吗?谢谢你们两个。“这解决了我的问题,我可以看到它是如何完成的。”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