全排列的公式为:
A
n
m
;
A _n^m ;
Anm;
以 " AABBCC ” 为例,全排列的公式有:
A
6
6
=
6
!
;
A _6^6 = 6! ;
A66=6!;
重复的字母为 “ ABC ” ,各重复2个,故重复的次数为:
A
2
2
∗
A
2
2
∗
A
2
2
;
A _2^2 * A _2^2 * A _2^2 ;
A22∗A22∗A22;
所以,所有不同的排列数有:
S
n
=
A
6
6
A
2
2
∗
A
2
2
∗
A
2
2
=
720
8
=
90
;
S _n = frac{A _6^6 }{A _2^2 * A _2^2 * A _2^2} = frac{720 }{8} =90;
Sn=A22∗A22∗A22A66=8720=90;
# 传入需要排列的字符串,返回字符串所有的排列列表,包含重复的,使用递归法
def di_gui(str1):
if len(str1) <= 1:
return str1
list1 = []
for i in range(len(str1)):
for j in di_gui(str1[0:i] + str1[i+1:]):
list1.append(str1[i] + j)
return list1
# 列表去重===========
def qu_chong(l1):
l2 = []
for i in l1:
if i not in l2:
l2.append(i)
return l2
if __name__ == '__main__':
str1 = "AABBCC"
list1 = di_gui(str1)
print(len(list1), list1) # 输出全排列的列表个数和项次,包含重复的~
list2 = qu_chong(list1) # 去重
print(len(list2), list2) # 输出全排列的列表个数和项次,不包含重复的~
输出的结果为:
3、Python使用数学公式计算全排列项次,不能输出有哪些项次,只能算出总数from collections import Counter # 导入计数模块
from math import factorial # 导入阶乘模块
if __name__ == '__main__':
str1 = "AABBCC"
a = 1
num1 = Counter(str1)
print(num1)
for i in num1.values():
a *= factorial(i)
print(factorial(len(str1)))
print(a)
print("阶乘结果:", factorial(len(str1))//a)
输出的结果为:



