python基础知识-8-三元和一行代码(推导式)
python其他知识目录
1、三元运算(三目运算)
三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值
格式:[on_true] if [expression] else [on_false]
res = 值1 if 条件 else 值2
其他语言类似结构:
判段的条件?条件为真时的结果:条件为假时的结果
赋值一个变量,不满足某个条件就重新赋予另一个值一行代替四行,简化代码
a = 1 b = 2 #变量值是...,如果不满足那么值是....。 h = "" h = "变量1" if a>b else "变量2" #可以设置默认设置真,不满足某个条件就等于假;可以默认设置通过,不满足某个条件就不通过,$与shell的那个判断相似,有时间增加一下 print(h) ------------结果: 变量2a = 1 #判断是否为最大值 b = 2 c = 3 max = a if a>b and a>c else "a不是最大值" print(max) -----------结果: a不是最大值a = 1 #和上面的对比,也可以不用变量来接收的打印 b = 2 c = 3 print( a if a>b and a>c else "a不是最大值") -----------结果: a不是最大值a = 7 #求三个数最大值 b = 6 c = 5 print((a if (a > b) else b) if ((a if (a > b) else b) > c) else c) -------------结果: 7a = 7 b = 6 c = 5 #print((a if (a > b) else b) if ((a if (a > b) else b) > c) else c) # (a if (a > b) else b) (a if (a > b) else b) d = (a if (a > b) else b) print(d if (d>c) else c) ----------------结果: 7mcw = [i for i in range(1,11) if i%2==0 ] #三元运算和列表。将1-10之间的偶数追加到列表 print(mcw) ---------------结果: [2, 4, 6, 8, 10]
#自我解析:某个事物有两种变化的时候使用,不满足某个条件就是选第二种变化。举例子比如:开关的开
和关;奇数是+号,偶数是-号求和;真和假的判断;作为一个旗帜等等。
#最终简化:赋值一个变量,不满足某个条件就重新赋予另一个值
2、实现一行打印代码的原理(精简代码)
2.1基本原理:
li=["小","马","过","河"] print([i for i in li]) ------------------结果: ['小', '马', '过', '河']
li=["小","马","过","河"]print([i+"*" for i in li]) #一行代码实现列表循环。i是每个元素,对i做操作那么每个列表元素都会做相同的操作。单行批量对列表元素进行操作。-----------------------结果:['小*', '马*', '过*', '河*']
li=["小","马","过","河"]print([i+"*" for i in li if type(li)==list]) #添加条件判断---------------------结果:['小*', '马*', '过*', '河*']
使用场景:对列表元素批量操作,只需要实现对列表单个元素实现一行执行(上题自变量i就是代表单个自变量,只需考虑对它操作),就可以实现单行代码实现有循环的功能
2.2精简案例:
请将ip=192.168.12.79中的四个十进制数转换成二进制,将四个二进制数拼接成一个二进制数并转换为十进制。(注意:12转换为二进制位数不满8位)
#精简之前ip="192.168.12.79" li=ip.split(".") li2=[] for i in li:m=str(bin(int(i))).lstrip("0b")m="0"*(8-len(m))+mli2.append(m) mcw="".join(li2) print(int(mcw,base=2))-----------------------结果:3232238671 #精简之后
print(int("".join(["0"*(8-len(str(bin(int(i))).lstrip("0b")))+str(bin(int(i))).lstrip("0b") for i in ip.split(".")]),base=2))
2.3单行实现列表元素的批量操作并且if判断某个条件真假,真假各自返回不同结果(三木运算结合列表)
li=["小","马","过","河"] a=[i+"*" for i in li ] b=[i+"_" for i in li ] print(a if "马" in li else b) ----------------结果: ['小*', '马*', '过*', '河*'] #判断为真需要返回的结果ali=["小","马","过","河"] a=[i+"*" for i in li ] b=[i+"_" for i in li ] print(a if "魔" in li else b) -------------------结果: ['小_', '马_', '过_', '河_'] #判断为假需要返回的结果bli=["小","马","过","河"] print([i+"*" for i in li ] if "过" in li else [i+"_" for i in li ]) #将a,b变量的值直接替换a,b变量的位置,单行实现功能 -------------结果: ['小*', '马*', '过*', '河*']
2.4、单行实现给每个列表元素加*并加一个序列,使得列表元素对应有序。(两个不同的for循环)
li=["小","马","过","河"] a=[i+"*" for i in li ] b=[str(j)+" "+a[j] for j in range(0,len(a))] print(b) ----------------------结果: ['0 小*', '1 马*', '2 过*', '3 河*'] 变量代入代码后:
li=["小","马","过","河"] print([str(j)+" "+[i+"*" for i in li ][j] for j in range(0,len([i+"*" for i in li ]))])
2.5、if判断,指定哪个列表元素做或者不做批量操作
li=["小","马","过","河"] a=[i for i in li if i!="过"] print(a) -----------------------结果: ['小', '马', '河']
2.6、列表中可以用多个for循环,此次演示两个for循环
a=[str(i)+j for i in range(1,5) for j in ["小","马","过","河"]] print(a) --------------------------结果: ['1小', '1马', '1过', '1河', '2小', '2马', '2过', '2河', '3小', '3马', '3过', '3河', '4小', '4马', '4过', '4河']
2.7、集合和字典也可以这样支持这些操作
a={i for i in range(0,5)} print(a,type(a)) --------------------------结果: {0, 1, 2, 3, 4} <class 'set'>
m={i:j for i in range(1,4) for j in range(1,4)}print(m,type(m))-----------结果:{1: 3, 2: 3, 3: 3} <class 'dict'>
2.8、一行代码实现九九乘法表。让变量成为 [for 循环]
a="\n".join([" ".join(["%s*%s"%(i,j) for j in range(1,i+1)]) for i in range(1,10)]) print(a) ------------------------结果: 1*1 2*1 2*2 3*1 3*2 3*3 4*1 4*2 4*3 4*4 5*1 5*2 5*3 5*4 5*5 6*1 6*2 6*3 6*4 6*5 6*6 7*1 7*2 7*3 7*4 7*5 7*6 7*7 8*1 8*2 8*3 8*4 8*5 8*6 8*7 8*8 9*1 9*2 9*3 9*4 9*5 9*6 9*7 9*8 9*9
2.10九九乘法表一行实现过程分解
a=[i for i in range(1,5)] print(a) b=[["%s*%s"%(i,j) for j in range(1,i+1)] for i in range(1,5)] print(b) c=[" ".join(["%s*%s"%(i,j) for j in range(1,i+1)]) for i in range(1,5)] print(c) d="\n".join([" ".join(["%s*%s"%(i,j) for j in range(1,i+1)]) for i in range(1,5)]) print(d) ------------------------结果: [1, 2, 3, 4] [['1*1'], ['2*1', '2*2'], ['3*1', '3*2', '3*3'], ['4*1', '4*2', '4*3', '4*4']] #生成嵌套列表 ['1*1', '2*1 2*2', '3*1 3*2 3*3', '4*1 4*2 4*3 4*4']#用jion方法将每个子列表的元素分解成指定分隔符的字符串,形成每行要显示的内容。已经将每行的内容变成列表元素了 1*1 #每个列表元素都是一行的内容,用jion方法将每个元素用换行符拼接起来,实现换行 2*1 2*2 3*1 3*2 3*3 4*1 4*2 4*3 4*4 思路:每行输出用生成的嵌套子列表,每列输出用列?????join可以实现列表每个元素换行输出(换行符作为分隔符),join可以实现每个列表元素指定分隔符(包括空格符)拼接jion可以实现将嵌套子列表生成字符串拼接列表内循环([i for i in ... ])可以生成嵌套列表,jion可以分解列表成字符串。jion加列表内循环可以用一行代码实现有规律的多行打印jion加列表内循环可以用一行代码实现99乘法表等多行的结构
2.11、[如果不能返回多个变量,那么将多个变量放到一个数据类型返回]
题目:(a+b+c=1000,a^2+b^2=c^2,a,b,c属于整数,求a,b,c的组合。)执行有点慢,1000^3次循环呢
print([ [a,b,c] for a in range(0,1001) for b in range(0,1001) for c in range(0,1001) if a+b+c==1000 and a**2+b**2==c**2])---------结果:[[0, 500, 500], [200, 375, 425], [375, 200, 425], [500, 0, 500]]
2.12、列表推导式和字典推导式结合,由此得出将两个列表元素一个当键一个当值做成字典
print([[ i for i in range(3)] for i in range(3)]) print([{"k"+str(i):"v"+str(j) for j in range(3)} for i in range(3)]) print([["k"+str(i)+":"+"v"+str(j) for j in range(3)] for i in range(3)]) print([[{"k"+str(i):"v"+str(j)} for j in range(3)] for i in range(3)]) -------------结果: [[0, 1, 2], [0, 1, 2], [0, 1, 2]] [{'k0': 'v2'}, {'k1': 'v2'}, {'k2': 'v2'}] [['k0:v0', 'k0:v1', 'k0:v2'], ['k1:v0', 'k1:v1', 'k1:v2'], ['k2:v0', 'k2:v1', 'k2:v2']] [[{'k0': 'v0'}, {'k0': 'v1'}, {'k0': 'v2'}], [{'k1': 'v0'}, {'k1': 'v1'}, {'k1': 'v2'}], [{'k2': 'v0'}, {'k2': 'v1'}, {'k2': 'v2'}]] 两个列表元素一个当键一个当值做成字典
li1=["name","age","hobby"]li2=["mcw,18,study","xiaoma,19,music","yh,10,eat"]print([[li1[j]+":"+li2[i].split(",")[j] for j in range(0,len(li1))] for i in range(0,len(li2))])mcw=[{li1[j]:li2[i].split(",")[j] for j in range(0,len(li1))} for i in range(0,len(li2))]print(mcw)print(type(mcw[0]))-------------结果:
[['name:mcw', 'age:18', 'hobby:study'], ['name:xiaoma', 'age:19', 'hobby:music'], ['name:yh', 'age:10', 'hobby:eat']]
[{'name': 'mcw', 'age': '18', 'hobby': 'study'}, {'name': 'xiaoma', 'age': '19', 'hobby': 'music'}, {'name': 'yh', 'age': '10', 'hobby': 'eat'}]
<class 'dict'>
2.12、列表 推导式实现多个条件判断
如果a=1,输出m,如果a=2,输出c,如果否则输出m
原操作:
a=3 if a==1:print("m") elif a==2:print("c") else:print("w") ----------------结果: w
推导式实现步骤:
a=3 print(["m" if a==1 else ["c" if a==2 else "w"]]) ---------------结果: [['w']]a=3 print(["m" if a==1 else "".join(["c" if a==2 else "w"])]) --------------结果: ['w']a=3 print("".join(["m" if a==1 else "".join(["c" if a==2 else "w"])])) -----------结果: wa=2 print("".join(["m" if a==1 else "".join(["c" if a==2 else "w"])])) ----------结果: ca=1 print("".join(["m" if a==1 else "".join(["c" if a==2 else "w"])])) -----------------结果: m
2.13生成器推导式:
3、一行定义简单函数:lambda函数
4、map函数使用
进制参考链接:https://www.cnblogs.com/ds-3579/p/5246142.html
转载于:https://www.cnblogs.com/machangwei-8/p/10668571.html
python基础知识-8-三元和一行代码(推导式)相关推荐
- Python复习系列:Python基础知识(三)
Python基础知识(三) Python基础知识(三) (一)循环结构和选择结构 1. 条件表达式 2. 选择结构 2.1 单分支选择结构 2.2 双分支选择结构 2.3 多分支选择结构 2.4 选择 ...
- python基础知识(三)
1.函数 (def) def 顺序:位置 > *arge > 默认值 > **kwargs (*arge 和**kwargs是默认参数) <1>动态传参 def foot ...
- python基础知识大一总结与反思_反思总结及规划 其一
时间:2021年1月18日 起因:对吴恩达机器学习的课后作业现成代码阅读吃力 问题症结:已经有一年半没有复习过python导致的知识遗忘(根本原因),欠账太多 先前的错误做法:一页一页的复习<p ...
- python基础教程第三版-《Python基础教程第三版》原版中英文PDF+代码+袁国忠(译)...
<Python基础教程第3版>整本书的结构安排还是比较明显的.先是基础知识和python的基本数据类型和语言特性介绍,然后是面向对象的编程.之后介绍python的标准库以及相关主题的编程( ...
- python基础知识学习笔记(1)
python 基础知识学习笔记(1) 总结一下Python基础知识,以防忘记. 文章目录 python 基础知识学习笔记(1) 一.起步 1.python安装与编译环境 二.变量和简单数据类型 三.列 ...
- python程序如何执行死刑_「Python基础知识」Python生成器函数
原标题:「Python基础知识」Python生成器函数 对于程序而言,内存也是很重要的,因为程序中很多数据都是保存在内存中的,如果内存中存储的数据过多,那么系统就会崩溃,这是人们不希望发生的. 可以采 ...
- python基础知识-python基础知识,python必背内容,一、python的基
python基础知识,python必背内容,一.python的基 一.python的基础 1.简单写一行python代码:print("hello,world')print("你好 ...
- python环境下数据操作_数据分析环境搭建和Python基础知识
搭建数据分析环境主要包括使用anaconda管理包和环境:使用Jupyter notebook将说明文本.数学方程.代码和可视化内容全部组合到一个易于共享的文档中.Python基础知识包括关键点(数据 ...
- Python基础知识总结(期末复习精简版)
文章目录 知识汇总 前言 推荐的学习资料 复习要点 组合数据类型 序列类型通用操作符和函数 集合类型 映射类型 数值操作 运算符 字符串操作 字符串切片 基本切片操作 高级切片操作 操作.相关函数.相 ...
- Python基础知识学习笔记(一)
Python基础知识学习笔记(一) 文章目录 Python基础知识学习笔记(一) (一) 认识python 1.注释 2.变量及类型 3.关键字(标识符) (1)什么是关键字? (2)查看关键字 (3 ...
最新文章
- Javascript使用三大家族和事件来DIY动画效果相关笔记(一)
- zabbix trapper方式监控
- 【Flask】ORM的关联关系
- 如何确认与服务器偏差_货架如何正确验收
- QT乱码总结3.UNICODE有无BOM
- php订阅系统,php redis pub/sub(Publish/Subscribe,发布/订阅的信息系统)之基本使用
- 回放导出数据_王者荣耀本地视频怎么导出MP4格式视频文件?答案在这里
- Android的5个进程等级(转)
- 生活大爆炸系列之制作望远镜架
- Arduino AT24C02详解读写地址位
- 【LLS-Player】webrtc m94 修改
- css3 简单的动画实现欢乐愉快的小鱼
- kafka集群搭建教程(使用自带的zookeeper)
- 罗德里格斯公式证明(Games101)
- Java的反编译工具提供官网下载
- 学生考试作弊行为视频实时检测系统源码
- Elasticsearch(022):es常见的字段映射类型之地理形状类型(geo_shape、多边的复杂的地址形状)
- 虚拟化及vmware产品介绍
- 2023开户选哪个证券公司比较好?哪个券商服务最好?
- ug10后处理安装步骤 ug后处理论坛网 ug后处理在什么位置 ug后处理报警大全 ug法兰克后处理下载 ug后处理器如何设置 ug三轴后处理制作教程 法兰克ug后处理文件 ug后处理构造器
热门文章
- mininet在哪编写python脚本_1 mininet 简介及同时支持python2和python3
- java annotation应用_java Annotation的应用
- django框架中表单
- Java——demo之仿ATM操作
- IDEA、 JetBrains、webstorm、 pycharm 破解教程
- mac使用brew update无反应解决办法
- MySQL InnoDB存储引擎
- 教你在CorelDRAW中导入位图
- SBuild 0.1.4 发布,基于 Scala 的构建系统
- 深入探讨用位掩码代替分支(8):SSE指令集速度测试