当前位置:网站首页>实例001:数字组合 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

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

2022-07-05 08:16:00 懒笑翻

# 实例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个数字,由于要求不重复数字,因此在输出时做出条件判断,只输出百位数十位数个位数都不相同的数。

arrange = 0  # 定义排列数
nums = range(1, 5)

# 方法一
for i in nums:  # 百位数
    for j in nums:  # 十位数
        for k in nums:  # 个位数
            if ((i != j) and (j != k) and (k != i)):  # 只输出无重复数字
                print(i, j, k)
                arrange += 1
print(arrange)

运行结果如下: 

1 2 3
1 2 4
1 3 2
1 3 4
1 4 2
1 4 3
2 1 3
2 1 4
2 3 1
2 3 4
2 4 1
2 4 3
3 1 2
3 1 4
3 2 1
3 2 4
3 4 1
3 4 2
4 1 2
4 1 3
4 2 1
4 2 3
4 3 1
4 3 2
24 个

Process finished with exit code 0

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

import itertools  # itertools,是python的一个内置模块,功能强大,主要用于高效循环创建迭代器。注意一点,他返回的不是list,而是iterator

arrange = 0  # 定义排列数
nums = range(1, 5)
for i in itertools.permutations(nums, 3):  # (迭代的元素,迭代序列长度)
    print(i)
    arrange += 1
print(arrange)

 运行结果如下:

(1, 2, 3)
(1, 2, 4)
(1, 3, 2)
(1, 3, 4)
(1, 4, 2)
(1, 4, 3)
(2, 1, 3)
(2, 1, 4)
(2, 3, 1)
(2, 3, 4)
(2, 4, 1)
(2, 4, 3)
(3, 1, 2)
(3, 1, 4)
(3, 2, 1)
(3, 2, 4)
(3, 4, 1)
(3, 4, 2)
(4, 1, 2)
(4, 1, 3)
(4, 2, 1)
(4, 2, 3)
(4, 3, 1)
(4, 3, 2)
24

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

class permutations(object):
    """
    Return successive r-length permutations of elements in the iterable.
    
    permutations(range(3), 2) --> (0,1), (0,2), (1,0), (1,2), (2,0), (2,1)
    """
    def __getattribute__(self, *args, **kwargs): # real signature unknown
        """ Return getattr(self, name). """
        pass

    def __init__(self, range, *args, **kwargs): # real signature unknown; NOTE: unreliably restored from __doc__ 
        pass

    def __iter__(self, *args, **kwargs): # real signature unknown
        """ Implement iter(self). """
        pass

    @staticmethod # known case of __new__
    def __new__(*args, **kwargs): # real signature unknown
        """ Create and return a new object.  See help(type) for accurate signature. """
        pass

    def __next__(self, *args, **kwargs): # real signature unknown
        """ Implement next(self). """
        pass

    def __reduce__(self, *args, **kwargs): # real signature unknown
        """ Return state information for pickling. """
        pass

    def __setstate__(self, *args, **kwargs): # real signature unknown
        """ Set state information for unpickling. """
        pass

    def __sizeof__(self, *args, **kwargs): # real signature unknown
        """ Returns size in memory, in bytes. """
        pass

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

原网站

版权声明
本文为[懒笑翻]所创,转载请带上原文链接,感谢
https://lanxf.blog.csdn.net/article/details/125606537