栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

零基础学Python———求一个字符串的每个字符重新组合排列python排列组合的数学运算(递归法)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

零基础学Python———求一个字符串的每个字符重新组合排列python排列组合的数学运算(递归法)

1、数学知识温习

全排列的公式为:
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​∗A22​A66​​=8720​=90;

2、python使用递归法求所有的重排列项次和数目
# 传入需要排列的字符串,返回字符串所有的排列列表,包含重复的,使用递归法
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)

输出的结果为:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923190.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号