如何枚举阶乘的所有模式?

How can I enumerate all patterns of factorial?

我正在尝试创建一个函数来计算每条路线的所有距离。例如:A 在 (0,0),B 在 (1,0),C 在 (0,1)。然后有 6 条路线穿过所有城镇,如 ABC 或 ACB 或 BAC 或 BCA 或 CAB 或 CBA。 在这里,我的问题是,如何枚举所有阶乘模式,如 ABC、ACB、BAC、BCA、CAB、CBA。如果是2就容易了!或 3!,但如果是 8!,那就太难了。如果你知道,我想知道你的建议!

import itertools

string = 'ABC';

result = itertools.permutations(string, 3)

for val in result:
    print(''.join(val))

Python 有一个内置函数 itertools.permutations。你可以这样使用它

from itertools import permutations

data = ['a', 'b', 'c']
print(list(permutations(data)))

输出:

[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]

您可以使数据包含像 data = [(0, 0), (1, 0), (0, 1)] 这样的元组 然后输出将如下所示

[((0, 0), (1, 0), (0, 1)), ((0, 0), (0, 1), (1, 0)), ((1, 0), (0, 0), (0, 1)), ((1, 0), (0, 1), (0, 0)), ((0, 1), (0, 0), (1, 0)), ((0, 1), (1, 0), (0, 0))]