• 实例001:数字组合 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?


    # 实例001:数字组合
    # 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

      环境:Pycharm2022 + Anaconda3

     先用数学排列组合分析再用Python实现 并进行方法总结

    目录

            用数学排列组合分析

            Python实现


            用数学排列组合分析

            首先我想到的是排列数组合数,由于题目要求是无重复数字,因此为排列数。排列的定义:从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个不同的元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数。

                                           

             我们可以得出此题的排列数是 4! / (4-3)! = 4! = 24 (个)

            Python实现

            方法一:我们可以循环遍历3个数字,由于要求不重复数字,因此在输出时做出条件判断,只输出百位数十位数个位数都不相同的数。

    1. arrange = 0 # 定义排列数
    2. nums = range(1, 5)
    3. # 方法一
    4. for i in nums: # 百位数
    5. for j in nums: # 十位数
    6. for k in nums: # 个位数
    7. if ((i != j) and (j != k) and (k != i)): # 只输出无重复数字
    8. print(i, j, k)
    9. arrange += 1
    10. print(arrange)

    运行结果如下: 

    1. 1 2 3
    2. 1 2 4
    3. 1 3 2
    4. 1 3 4
    5. 1 4 2
    6. 1 4 3
    7. 2 1 3
    8. 2 1 4
    9. 2 3 1
    10. 2 3 4
    11. 2 4 1
    12. 2 4 3
    13. 3 1 2
    14. 3 1 4
    15. 3 2 1
    16. 3 2 4
    17. 3 4 1
    18. 3 4 2
    19. 4 1 2
    20. 4 1 3
    21. 4 2 1
    22. 4 2 3
    23. 4 3 1
    24. 4 3 2
    25. 24
    26. Process finished with exit code 0

            方法二:可以直接调用itertools的permutations()类,# itertools,是python的一个内置模块,功能强大,主要用于高效循环创建迭代器。注意一点,他返回的不是list,而是iterator

    1. import itertools # itertools,是python的一个内置模块,功能强大,主要用于高效循环创建迭代器。注意一点,他返回的不是list,而是iterator
    2. arrange = 0 # 定义排列数
    3. nums = range(1, 5)
    4. for i in itertools.permutations(nums, 3): # (迭代的元素,迭代序列长度)
    5. print(i)
    6. arrange += 1
    7. print(arrange)

     运行结果如下:

    1. (1, 2, 3)
    2. (1, 2, 4)
    3. (1, 3, 2)
    4. (1, 3, 4)
    5. (1, 4, 2)
    6. (1, 4, 3)
    7. (2, 1, 3)
    8. (2, 1, 4)
    9. (2, 3, 1)
    10. (2, 3, 4)
    11. (2, 4, 1)
    12. (2, 4, 3)
    13. (3, 1, 2)
    14. (3, 1, 4)
    15. (3, 2, 1)
    16. (3, 2, 4)
    17. (3, 4, 1)
    18. (3, 4, 2)
    19. (4, 1, 2)
    20. (4, 1, 3)
    21. (4, 2, 1)
    22. (4, 2, 3)
    23. (4, 3, 1)
    24. (4, 3, 2)
    25. 24
     
    

    方法二种用到的 itertools.permutations 类,该类内容如下:

    1. class permutations(object):
    2. """
    3. Return successive r-length permutations of elements in the iterable.
    4. permutations(range(3), 2) --> (0,1), (0,2), (1,0), (1,2), (2,0), (2,1)
    5. """
    6. def __getattribute__(self, *args, **kwargs): # real signature unknown
    7. """ Return getattr(self, name). """
    8. pass
    9. def __init__(self, range, *args, **kwargs): # real signature unknown; NOTE: unreliably restored from __doc__
    10. pass
    11. def __iter__(self, *args, **kwargs): # real signature unknown
    12. """ Implement iter(self). """
    13. pass
    14. @staticmethod # known case of __new__
    15. def __new__(*args, **kwargs): # real signature unknown
    16. """ Create and return a new object. See help(type) for accurate signature. """
    17. pass
    18. def __next__(self, *args, **kwargs): # real signature unknown
    19. """ Implement next(self). """
    20. pass
    21. def __reduce__(self, *args, **kwargs): # real signature unknown
    22. """ Return state information for pickling. """
    23. pass
    24. def __setstate__(self, *args, **kwargs): # real signature unknown
    25. """ Set state information for unpickling. """
    26. pass
    27. def __sizeof__(self, *args, **kwargs): # real signature unknown
    28. """ Returns size in memory, in bytes. """
    29. pass

    permutations类创建一个迭代器,返回iterable中所有长度为r的项目序列,如果省略了r,那么序列的长度与iterable中的项目数量相同,即会返回一个全排列的结果。  

  • 相关阅读:
    膀胱癌、炎症和微生物组
    测试--自动化测试:关于unittest框架
    极大似然法
    能聚合各站热点的DailyHot
    深度学习(PyTorch)——多分类问题(Softmax Classifier)
    字节一面:说说HTTP 常见的状态码有哪些,适用场景?
    漫谈计算机网络:概述 ------ 从起源开始到分层协议结构,初识究竟什么是计算机网络?
    Transformer解码层用mask解释
    《Relation of the Relations A New Paradigm of the Relation Extraction Problem》论文阅读笔记
    以太坊智能合约方法初探
  • 原文地址:https://blog.csdn.net/c_lanxiaofang/article/details/125606537