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

2024-06-01 00:35:06 发布

您现在位置:Python中文网/ 问答频道 /正文

请耐心听我解释,我的数学不好,我刚开始电脑编程,对不起!在

我说我有三个项目的清单。我想找到这个列表中所有可能的项目安排,每个项目由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'语句来修改代码以处理更长的列表,但我觉得必须有一种方法来推广模式。我该怎么做才能得到上面描述的任意长度列表的排列?在

我认为我的穷举枚举方法可能会使这比它需要的更复杂。。。将尝试考虑其他方法,并在找到解决方案时进行更新。在

^{pr2}$

Tags: 项目方法代码列表for编程模式数学
2条回答

这将执行您想要的操作:https://stackoverflow.com/a/10784693/1419494

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

只要^{}。如果你想要精确的算法,你可以检查它的来源。在

相关问题 更多 >