zoukankan      html  css  js  c++  java
  • Python练习题 001:4个数字求不重复的3位数

    听说做练习是掌握一门编程语言的最佳途径,那就争取先做满100道题吧。

    ----------------------------------------------------------------------

    【Python练习题 001】有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

    这题还算比较简单,思路是:先确定百位数、然后是十位数、个位数。1-4 四个数字循环一遍,就都全出来了。 

    res = []
    for i in range(1,5):
        for j in range(1,5):
            for k in range(1,5):
                res.append(i*100+j*10+k)
    print(res)
    

     如果不放心结果是否有重复,最后一行可以改成 print(set(res)),把 res 的类型由列表改为集合(set)。因为集合不允许有重复值,所以就可以保证结果的不重复性了。

    【2016-10-12 更新 】-------------------------------------------------------------------------

     受教于 backinfile 在评论中的说明,尝试了 itertools.product() 这种新方法,可以方便地生成任意多个集合的笛卡尔积:

    所谓“笛卡尔积”,大致就是指 2 个(或多个)集合所有元素排列组合的所有可能。

    用于本道题的话,只要生成 3 个 [1, 2, 3, 4] 数列的笛卡尔积,再分别安放到百位、十位、个位,就可以了。即:

    import itertools
    res = itertools.product(range(1,5),3)
    print([x[0]*100 + x[1]*10 + x[2] for x in set(res)], end = ', ')
    

    运行结果如下:

    [434, 422, 441, 132, 144, 224, 131, 432, 331, 341, 142, 433, 241, 342, 143, 231, 333, 343, 232, 431, 332, 243, 141, 233, 242, 314, 322, 414, 334, 313, 323, 244, 312, 121, 311, 321, 122, 214, 123, 411, 124, 212, 424, 111, 223, 324, 213, 412, 222, 413, 113, 221, 211, 421, 112, 444, 344, 443, 134, 234, 423, 114, 133, 442]

    【2016-10-13 更新】-------------------------------------------------------------------------

     从运行结果可以发现,像“434”、“422”、“441”这些数字并不符合“无重复数字”的要求。感谢 codegay 的提示,查了下 官方文档,发现其实应该用 itertools.permutations() 生成无重复的所有排列可能:

     

    因此,修改本题代码如下:

    import itertools
    res = []
    [res.append(i[0]*100 + i[1]*10 + i[2]) for i in itertools.permutations(range(1,5),3)]
    print(res, end = ',')
    

    输出结果如下:

    [123, 124, 132, 134, 142, 143, 213, 214, 231, 234, 241, 243, 312, 314, 321, 324, 341, 342, 412, 413, 421, 423, 431, 432]

    这下子就不会有重复数字了。太好了!

    ++++++++++++++++++++++++++++++++++++++++++++++

    题目出处:编程语言入门经典100例【Python版】

  • 相关阅读:
    Oracle 验证A表的2个字段组合不在B表2个字段组合里的数据
    jQuery方法一览
    Maven构建项目时index.jsp文件报错
    DDL——对数据库表的结构进行操作的练习
    不经意的小错误——onclick和click的区别
    UML基础——统一建模语言简介
    基于UML的面向对象分析与设计
    数据结构之——树与二叉树
    UML类图几种关系的总结
    C3P0连接参数解释
  • 原文地址:https://www.cnblogs.com/iderek/p/5952126.html
Copyright © 2011-2022 走看看