运行带有设定数字的列表的所有组合

问题描述

我有一个项目需要在循环中运行带有设置数字的列表的所有组合。

例如

code = [4,3,2,1]
code = [4,1,2]
code = [4,3]
.
.
.

我试图制作一长串数字来制作某种手册

例如

code = [4,1]
manual = [1,0]
for m in manual:
    print(code)
    if m == 1:
        code[-1],code[-2] = code[-2],code[-1]
    elif m == 2:
        code[-1],code[-3] = code[-3],code[-1]
    elif m == 3:
        code[-1],code[-2],code[-3],code[-4] = code[-4],code[-1]

这可行,但如果我有大量代码组合列表,手册会变得非常大。

有没有更好的方法 - 还是我应该继续使用手动版本?

我主要是用python写的,但也能读很多其他语言,所以如果你想用另一种语言写,我也能理解

解决方法

如果我正确理解您的问题,itertools.permutations 应该可以解决问题:

from itertools import permutations

code = [4,3,2,1]
for perm in permutations(code):
    print(perm)
# (4,1)
# (4,1,2)
# (4,1)
# ...
,

为此,您可以使用标准库中提供的排列函数,如果您使用的是 Python 2.6 及更高版本,或者您使用的是 Python 3。

import itertools
permutations = list(itertools.permutations([1,4]))

for i in list(perm):  
  print(i)

结果:

(1,4)
(1,4,3)
(1,2)
(1,2)
(2,4)
(2,3)
(2,1)
(2,1)
(3,4)
(3,2)
(3,1)
(4,3)
(4,2)
(4,1)