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

**程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。

个人解题思路

利用排列组合知识算出总共有4X3X2= 24个数,构造每个数加入列表中,打印输出。

  import randomli = ["1","2","3","4"]all_sum_num = 4*4*4new_sum_list = []for i in range(all_sum_num):choose_li =  random.sample(li,3)new_num_str = "".join(choose_li)new_sum_list.append(new_num_str)num_set = set(new_sum_list)num_str_list =  list(num_set)print(num_str_list)print(len(num_str_list))

  

分析:这种写法有个漏洞,就是随机取出的3个数并不能完全取完所有可能的数,造成结果不唯一,每次运行程序可能结果都不一致。

参考解答方法:

  li = []for i in range(1,5):for j in range(1,5):for k in range(1,5):if i != k and i != j and j != k:num = i*100 + j*10 + kli.append(num)​print(li)print(len(li))

  

分析:用3个for循环,加上if条件判断,将产生的数加入列表即可

上述代码可以继续精简

  li1 = [1,2,3,4]li2  = [a*100 + b*10 +c for a in li1 for b in li1 for c in li1 if a != b and a != c and b != c]print(li2)print(len(li2))

  

分析:采用列表解析式,分别对百位、十位、个位的数字进行生成并合成列表的元素。

相关知识:

列表解析式

列表解析式,也可以叫列表推导式

语法

[expression for iter_var in iterable1] ​​​[expression for iter_var2 in iterable2 ...​                   for iter_varN in iterableN]​​[expression for iter_var in iterable1​                   if condition]

列表解析式是将一个可迭代对象(如列表)转换成另一个列表的工具。在转换过程中,可以指定元素必须符合某一条件,并按照指定的表达式进行转换,才能添加至新的列表中。

例子1

  
  #生成1*1,2*2,3*3,4*4,5*5,6*6,9*9的序列li1 = [x*x for x in range(1,11)]print(li1)

  

例子2

使用两层循环的情况

  li1 = [m+n for m in range(3) for n in range(2)]print(li1)​#li1的列表解析式等价于下面的嵌套for循环,即m是来自于第一个for循环,n的数值是来自于第二个for循环li2 = []for i in range(3):for j in range(2):num = i+jli2.append(num)print(li2)

  

例子3

  #获取列表中嵌套列表的元素,生成一个无嵌套的新列表li3=[[1,2],[3,4,5],[6,7],[8]]print([x  for i in li3 for x in i])

  

例子4

  
  # 获取两个列表对应位的乘积lia=[2,3,4,5]lib=[3,4,5,6]zip_li = zip(lia,lib)print(zip_li) #这里产生的zip对象是两个一一对应的元组,可以用for循环取出来print([i*j for i,j in zip(lia,lib)])

  

例子5

  # 获取文本中所有单词的第1个字符text = "Alibaba founder Jack Ma laughs off AC Milan football club purchase rumors"first_charts=[word[0] for word in text.split()]print(first_charts)

  

例子6

列表生成式加三元运算

  # 将列表中所有能转化为数字的字符串转化为数字lix = ['1','2','3','i','8']liy = [int(x)if x.isdigit()else x for x in lix]print(liy)

例子7

  # 将列表中小于5的数*10lic = [1,3,4,10,18]print([x*10 for x in lic if x < 5 ])#注意这里是列表解析式,只是加上了条件判断,注意与列表解析式加三元运算的区别,这里加不了elseprint([x*10 if x < 5 else x for x in lic])#也可以改写成列表解析加三元运算

  

(本文编号001,首发于2018年9月11日,修改于2018年9月12日)

转载于:https://www.cnblogs.com/Nicholas0707/p/9630924.html

Python:每日一题001相关推荐

  1. delphi 多个线程 多个进度条_多线程有哪些优点?- Python每日3题(多线程专题)

    这里是Python7编程挑战-多线程专题! 每天学习3个问题,包括初级,中级,高级问题各1个. 今天是第2天!一起来呀,就7天! 每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一 ...

  2. linux scrapy 定时任务_写爬虫一定要会scrapy?-Python每日3题(爬虫专题)

    这里是Python7编程挑战-爬虫专题! 每天学习3个问题,包括初级,中级,高级问题各1个. 今天是第2天!一起来呀,就7天! 每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一道 ...

  3. Python 每日一题(一元二次方程求解)

    Python 每日一题:锻炼Python语法的运用,思维逻辑的锻炼,算法能力的培养. 题目: 输入一个一元二次方程的系数 a, b, c,求解方程的根. 分析:  1.一元二次方程标准形式: (a ≠ ...

  4. Python 每日一题(猴子吃桃问题)

    Python 每日一题:锻炼Python语法的运用,思维逻辑的锻炼,算法能力的培养. 题目: 一个猴子第一天摘下若干个桃子,当即吃了1半,还不过瘾,又多吃了1个.第二天早上吃了剩下桃子的1半,以后每天 ...

  5. python每日一题今天的答案_python每日一题总结1

    每日一题1 1. 写出python中import 导入库的几种常见写法 举例:import math from math imourt sqrt 每日一题2 1. print 1000L  的结果 答 ...

  6. python3 多线程 threading.local 代理_threading.local的作用?Python每日3题(多线程专题)...

    这里是Python7编程挑战-多线程专题! 每天学习3个问题,包括初级,中级,高级问题各1个. 今天是第5天!一起来呀,就7天!每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一道 ...

  7. 旧瓶装新酒系列-Python每日多题(一)

    项目结束,终于有时间静下心来好好学习Python了.对于Python,我还是新手,只大概看过一遍<A byte of Python>.准备直接做些小的练习,题目就照搬Java的和C的经典课 ...

  8. python每日一题公众号_python每日一题总结4

    20180609 qzd 每日一题14 输入三个整数x,y,z,请把这三个数由小到大输出. my code x=int(input('x:')) y=int(input('y:')) z=int(in ...

  9. 少儿Python每日一题(8):最大公约数和最小公倍数

    求两个数的最大公约数和最小公倍数是非常经典的题型.无论是等级考试还是竞赛题中都会出现.此类题目同时多次出现在蓝桥杯.NOC的比赛中以及电子学会.NCT的Python考级原题中,它们的区别仅仅在于是否对 ...

  10. 【每日一题~001】谈谈synchronized与ReentrantLock的区别?

    每日一题,共同成长,见证奇迹,加油老铁 问题:谈谈synchronized与ReentrantLock的区别?思考:2分钟...答案如下:1.底层实现:1)synchronized 是JVM层面的锁, ...

最新文章

  1. oracle 的 import,ORACLE import工具参数
  2. 直接路径读取对于延迟块清除的影响
  3. 转:Hibernate中Criteria和DetachedCriteria的完整用法
  4. java6集合编程题
  5. wireshark源代码分析
  6. TensorFlow打印一个tensor值报错
  7. 【甘道夫】CDH5.2的Maven依赖
  8. 面向对象程序设计要考虑的7个原则
  9. Vue | 实现页面跳转刷新,在Vue页面中调用其他页面的方法
  10. comsol线圈不能加电流激励_comsol里面如何绘制三维的激励线圈?
  11. flink fi java_Flink DataStream API编程指南
  12. QCon全球软件开发大会:推动创新,实现技术落地
  13. java p39课后答案_面向对象程序设计(JAVA)答案
  14. 【初识数据结构】手把手教会你时间复杂度的计算方法
  15. SFuzz: Slice-based Fuzzing for Real-Time Operating Systems
  16. python计算圆柱体积_python计算圆周长、面积、球体体积并画出圆
  17. 虚拟码号应用行业介绍!
  18. 华为无线设备配置同一业务VLAN的AP间快速漫游
  19. RobotStudio如何配置自定的义第七轴
  20. 如何理解LTE中的天线端口和端口数?

热门文章

  1. Python解决数独
  2. Vmware VPD要点
  3. mybatis表关联彻底理解
  4. vmware中linux无法动态获取dhcp解决方法
  5. php 中 fastcgi
  6. 烂泥:CentOS6.5挂载windows共享文件夹
  7. Android开发实例之多点触控程序
  8. 使用Deinstall专用工具删除Oracle Database
  9. [ 搞笑 ] 疯狂的石头与张柏芝
  10. 域客户端的计算机更名