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

jdi*_*ard 2 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

1, 2
1, 3
2, 1
2, 3
3, 1
3, 2

1
2
3
Run Code Online (Sandbox Code Playgroud)

我下面写的代码可以做我上面写的,但只适用于长度为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
Run Code Online (Sandbox Code Playgroud)

Rom*_*huk 8

只是itertools.permutations.如果你想要精确的算法,你可以检查它的来源.