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

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

个人解题思路

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

  import random
li = ["1","2","3","4"]
all_sum_num = 4*4*4
new_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 + k
li.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+j
li2.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的数*10
lic = [1,3,4,10,18]
print([x*10 for x in lic if x < 5 ])
#注意这里是列表解析式,只是加上了条件判断,注意与列表解析式加三元运算的区别,这里加不了else
print([x*10 if x < 5 else x for x in lic])
#也可以改写成列表解析加三元运算

  

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

Python:每日一题001的更多相关文章

  1. Python每日一题 001

    Github地址:https://github.com/Yixiaohan/show-me-the-code Talk is Cheap, show me the code. --Linus Torv ...

  2. Python每日一题 004

    将 0001 题生成的 200 个激活码(或者优惠券)保存到 Redis 非关系型数据库中. 代码 import redis import uuid # 创建实例 r=redis.Redis(&quo ...

  3. Python每日一题 003

    将 002 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中. 代码 import pymysql import uuid def get_id(): for i in ra ...

  4. Python每日一题 002

    做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? 在此生成由数字,字母组成的20位字 ...

  5. Python每日一题 009

    题目 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但是要分别列出来. 代码 参照网络上代码 # coding: utf-8 import os import re # ...

  6. Python每日一题 008

    题目 基于多线程的网络爬虫项目,爬取该站点http://www.tvtv.hk 的电视剧收视率排行榜 分析 robots.txt User-agent: Yisouspider Disallow: / ...

  7. Python每日一题 007

    题目 你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词. 很难客观的说每篇日记中最重要的词是什么,所以在这里就仅仅是将每篇日记中出 ...

  8. Python每日一题 006

    题目 你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小. 如果只是单纯的通过将图片缩放到iPhone5分辨率大小,显然最后呈现出来的效果会很糟糕.所以等比例缩放到长( ...

  9. Python每日一题 005

    任一个英文的纯文本文件,统计其中的单词出现的个数. 代码 # coding:utf-8 import re def get_word(filename): fp=open(filename," ...

随机推荐

  1. 学Python的原因

    先立个旗,不学会誓不为人!!!!!!!!!!! 一直以来总是三天打鱼,两天晒网的学习,但是在体制内混久了发现,失去了很多的东西,得到的确极其有限,总感觉这样的生活会失去意义. 寻找生活的激情,重新发现 ...

  2. solr6.4.1搜索引擎(3)增量同步mysql数据库

    尚未实现首次同步mysql数据库的,请参考我的另一篇文章http://www.cnblogs.com/zhuwenjoyce/p/6512378.html(solr6.4.1搜索引擎同步mysql数据 ...

  3. Python撰写mail

    版本1   指定邮箱进行发送 """ 说明:指定账户密码进行邮件发送 由312051952@qq.com-->c4kaichen@163.com "&qu ...

  4. Pyspider框架

    1, 2,在ubuntu安装pyspider如果出现pycul的问题 首先执行命令:sudo apt-get install libssl-dev libcurl4-openssl-dev pytho ...

  5. UE4:四种加载资源的方式

    转自:https://blog.csdn.net/zhangxsv123/article/details/79707686 第一种: 如果该蓝图有C++类(或者说是从C++类创建的蓝图),直接进行加载 ...

  6. ps-如何去背景色(将背景色变透明)

    由于生活或工作的需求,图片的处理是必不可少.其中将图片某一部分变为透明,或者截取图片的某一部分比较常见. 1.首先,打开待处理的图片: 2.复制背景图层,将背景图层设为不可见(左边的眼睛即可),选择左 ...

  7. .NET自动化测试工具:Selenium Grid

    在生产环境,QA会同时跑几十个上百个的test case.如果用单机串行的话,是一件非常耗时的事情,估计比手点快不了多少.使用并行方案的话,有两种方法,一个是自己写并行框架,一个是用现成的Seleni ...

  8. Servlet的几个关键知识点

    1.ServletConfig ServletConfig是Servlet的配置文件.对应于web.xml中的<servlet></servlet>标签.ServletConf ...

  9. Tomcat的目录结构详细介绍(超全)

    打开tomcat的解压之后的目录可以看到如下的目录结构:  1.bin: bin目录主要是用来存放tomcat的命令,主要有两大类,一类是以.sh结尾的(linux命令),另一类是以.bat结尾的(w ...

  10. ABAP-FTP-配置

    1.FTP配置: 设置FTP参数:IP地址.账号.密码.路径.RFC目标. 设置数据表:数据表及字段明细,设置查询字段及报表输出字段. 2.操作界面 3.程序 ZFID0003_ETL_FTP 主程序 ...