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

问题描述

我正在尝试创建一个函数来计算每条路线的所有距离。例如: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 有一个 bultin 函数 itertools.permutations。你可以这样使用它

from itertools import permutations

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

输出:

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

你可以让数据包含像 data = [(0,0),(1,(0,1)] 这样的元组 然后输出看起来像这样

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