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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/279735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双11成交多少和我无关,但这个魔性MV真的让我笑喷!

今年天猫双11&#xff0c;印象最深的就是“祝你双11快乐”这句话&#xff01;它让大家感觉到双11不再只是一个购物节&#xff0c;而是一个能引起广泛共鸣、让大家有快乐情感的真正节日。以往的传统节日&#xff0c;都有一个标志性的符号&#xff0c;正如脑海中的每年春晚&#…

ios beta 下载_如何回滚到iOS 10(如果您使用的是iOS 11 Beta)

ios beta 下载So you’ve installed the iOS 11 beta and, well, you don’t love it. No problem, because you can roll right back to iOS 10. 因此&#xff0c;您已经安装了iOS 11 Beta &#xff0c;但是&#xff0c;您不喜欢它。 没问题&#xff0c;因为您可以直接回滚到i…

JmsTemplate sendAndReceive 设置超时

通过调用sendAndReceive方法&#xff0c;实现发送消息之后可以同步接收返回信息。 Message replyMsg this.jmsQueueTemplate.sendAndReceive(new MessageCreator(){Overridepublic Message createMessage(Session sn) throws JMSException {TextMessage txtMsg sn.createText…

亚信科技数据库AntDB通过金融分布式事务数据库标准测试

近日,南京, 中国信息通信研究院云计算与大数据研究所(以下简称“中国信通院云大所”)组织专家对亚信科技(股票代码:01675.HK)的数据库产品AISWare AntDB(以下简称“AntDB”),进行了金融分布式事务数据库标准测试,所有功能顺利通过测试。该测试的通过充分彰显了亚信科技AntDB是一…

安装sql2012 需要安装net3.5 没有的话 安装不成功

Error while enabling Windows feature : NetFx3, Error Code : -2146498298 在 Windows 8 或 Windows Server 2012 中安装 .NET Framework 3.5 时出现错误代码&#xff1a;0x800F0906 winx 管理员权限 打开cmd命令提示符处&#xff0c;运行下面的命令&#xff1a; Dism /onl…

instagram发布工具_如何在不发布照片的情况下保存已编辑的Instagram照片

instagram发布工具Unfortunately, there’s no built-in method for saving your edited Instagram photos without posting them first. However, with this neat trick, you can add Instagram filters to your photos and save them locally to your phone without actually…

Verify the Developer App certificate for your account is trusted on your device.

1、报错内容 Could not launch “CH5203” Verify the Developer App certificate for your account is trusted on your device. Open Settings on 测试 and navigate to General -> Device Management, then select your Developer App certificate to trust it. 2、解决方…

HTTP2和HTTPS来不来了解一下?

一、前言 只有光头才能变强 HTTP博文回顾&#xff1a; PC端&#xff1a;HTTP就是这么简单PC端&#xff1a;HTTP面试题都在这里微信公众号端&#xff1a;HTTP就是这么简单微信公众号端&#xff1a;HTTP面试题都在这里本文力求简单讲清每个知识点&#xff0c;希望大家看完能有所收…

apple默认备份位置_如何将Apple Maps默认设置为步行路线

apple默认备份位置The default mode of transportation in Apple Maps is set to driving, but with a simple tweak, you can adjust your Apple Maps experience to default to the mode you use most. Apple Maps中的默认交通方式设置为行车&#xff0c;但是通过简单的调整&…

php 面向对象

1类的创建 class创建类 class Person{} 2.对象的创建 使用new关键字 class Person{} $p1new Person 3.成员的添加 添加成员需要 三个修饰符 public 公开的 定义公共的属性和方法&#xff0c;类的外部&#xff0c;类的内部&#xff0c;子类都可以使用 protected 受保护的 定义…

apache 404\403错误页面跳转

1、全局下使用404跳转 在httpd.conf下配置跳转 1vim /usr/local/httpd/conf/httpd.conf 123456<Directory "/usr/local/httpd-2.4.25/htdocs"> AllowOverride None Require all granted ErrorDocument 404 /aa.jpg #配置跳转页面&#xff0c;注意aa文件必须在…

JS实现千分位

方法一&#xff1a;正则实现 function format (num) { var reg/\d{1,3}(?(\d{3})$)/g; return (num ).replace(reg, $&,); } 解释&#xff1a; 1、正则表达式 \d{1,3}(?(\d{3})$) 表示前面有1~3个数字&#xff0c;后面的至少由一组3个数字结尾 2、?表示正向引用&…

白色裤子为什么会沾上蓝色_什么是蓝色的,为什么它可以在Mac上运行?

白色裤子为什么会沾上蓝色You’re looking through Activity Monitor when you notice a process called blued. Should you be worried that this is running? No: it’s the process that powers Bluetooth on your Mac. 当您发现一个名为blued的进程时&#xff0c;您正在浏…

ThreadLocal源码剖析

。。转载于:https://www.cnblogs.com/Joy-Hu/p/10677434.html

Linux移植之内核启动过程引导阶段分析

在Linux移植之make uImage编译过程分析中已经提到了uImage是一个压缩的包并且内含压缩程序&#xff0c;可以进行自解压。自解压完成之后内核代码从物理地址为0x30008000处开始运行。下面分析在进入C之前内核做的一些工作&#xff0c;以下是内核启动过程中打印出来的信息&#x…

阿里开源HTML5小游戏开发框架Hilo实战教程

前言 开发基于Html5的小游戏并不困难&#xff0c;基本思路就是使用Html5的canvas进行游戏图像绘制&#xff0c;通过监听Dom元素的touch事件并触发相应的动画&#xff0c;来实现游戏的交互。难在于解决开发后面临的不同设备游戏画面、音效等兼容性问题。 使用Hilo可以帮助我们解…

outlook附件大小限制_如何在Outlook中调整大图片附件的大小

outlook附件大小限制When you have to send someone a large image file through email, it’s a good idea to resize the image file to make it smaller before sending it. Outlook makes this easy and allows you to resize the image file as it’s sent. 当您必须通过电…

bzoj2460: [BeiJing2011]元素

怕不是学了个假的线性基。。。一直以为要高位到低位插入&#xff0c;结果那个是高斯消元的线性基。。。 那么直接排序权值就行了。 #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<…

西湖论剑WP

先水几句&#xff0c;这次的题确实难啊&#xff0c;动用洪荒之力了&#xff0c;第一名的神仙也没有全部做完。 官方说这次的题目有两道没被做出来&#xff0c;我猜应该是PWN和RE吧 本来我们是45名的&#xff0c;最后5分钟那帮人啊&#xff0c;硬生生给我们挤出前50&#xff0c;…

vm macos 启用3d_如何在macOS中启用夜班以减轻眼睛疲劳

vm macos 启用3dNight Shift is a new feature introduced in macOS Sierra 10.12.4, and you might already be familiar with it if you’re an iOS user. Here’s how to enable it and set it up on your Mac. Night Shift是macOS Sierra 10.12.4中引入的新功能&#xff0c…