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-三元和一行代码(推导式)相关推荐

  1. Python复习系列:Python基础知识(三)

    Python基础知识(三) Python基础知识(三) (一)循环结构和选择结构 1. 条件表达式 2. 选择结构 2.1 单分支选择结构 2.2 双分支选择结构 2.3 多分支选择结构 2.4 选择 ...

  2. python基础知识(三)

    1.函数 (def) def 顺序:位置 > *arge > 默认值 > **kwargs (*arge 和**kwargs是默认参数) <1>动态传参 def foot ...

  3. python基础知识大一总结与反思_反思总结及规划 其一

    时间:2021年1月18日 起因:对吴恩达机器学习的课后作业现成代码阅读吃力 问题症结:已经有一年半没有复习过python导致的知识遗忘(根本原因),欠账太多 先前的错误做法:一页一页的复习<p ...

  4. python基础教程第三版-《Python基础教程第三版》原版中英文PDF+代码+袁国忠(译)...

    <Python基础教程第3版>整本书的结构安排还是比较明显的.先是基础知识和python的基本数据类型和语言特性介绍,然后是面向对象的编程.之后介绍python的标准库以及相关主题的编程( ...

  5. python基础知识学习笔记(1)

    python 基础知识学习笔记(1) 总结一下Python基础知识,以防忘记. 文章目录 python 基础知识学习笔记(1) 一.起步 1.python安装与编译环境 二.变量和简单数据类型 三.列 ...

  6. python程序如何执行死刑_「Python基础知识」Python生成器函数

    原标题:「Python基础知识」Python生成器函数 对于程序而言,内存也是很重要的,因为程序中很多数据都是保存在内存中的,如果内存中存储的数据过多,那么系统就会崩溃,这是人们不希望发生的. 可以采 ...

  7. python基础知识-python基础知识,python必背内容,一、python的基

    python基础知识,python必背内容,一.python的基 一.python的基础 1.简单写一行python代码:print("hello,world')print("你好 ...

  8. python环境下数据操作_数据分析环境搭建和Python基础知识

    搭建数据分析环境主要包括使用anaconda管理包和环境:使用Jupyter notebook将说明文本.数学方程.代码和可视化内容全部组合到一个易于共享的文档中.Python基础知识包括关键点(数据 ...

  9. Python基础知识总结(期末复习精简版)

    文章目录 知识汇总 前言 推荐的学习资料 复习要点 组合数据类型 序列类型通用操作符和函数 集合类型 映射类型 数值操作 运算符 字符串操作 字符串切片 基本切片操作 高级切片操作 操作.相关函数.相 ...

  10. Python基础知识学习笔记(一)

    Python基础知识学习笔记(一) 文章目录 Python基础知识学习笔记(一) (一) 认识python 1.注释 2.变量及类型 3.关键字(标识符) (1)什么是关键字? (2)查看关键字 (3 ...

最新文章

  1. Javascript使用三大家族和事件来DIY动画效果相关笔记(一)
  2. zabbix trapper方式监控
  3. 【Flask】ORM的关联关系
  4. 如何确认与服务器偏差_货架如何正确验收
  5. QT乱码总结3.UNICODE有无BOM
  6. php订阅系统,php redis pub/sub(Publish/Subscribe,发布/订阅的信息系统)之基本使用
  7. 回放导出数据_王者荣耀本地视频怎么导出MP4格式视频文件?答案在这里
  8. Android的5个进程等级(转)
  9. 生活大爆炸系列之制作望远镜架
  10. Arduino AT24C02详解读写地址位
  11. 【LLS-Player】webrtc m94 修改
  12. css3 简单的动画实现欢乐愉快的小鱼
  13. kafka集群搭建教程(使用自带的zookeeper)
  14. 罗德里格斯公式证明(Games101)
  15. Java的反编译工具提供官网下载
  16. 学生考试作弊行为视频实时检测系统源码
  17. Elasticsearch(022):es常见的字段映射类型之地理形状类型(geo_shape、多边的复杂的地址形状)
  18. 虚拟化及vmware产品介绍
  19. 2023开户选哪个证券公司比较好?哪个券商服务最好?
  20. ug10后处理安装步骤 ug后处理论坛网 ug后处理在什么位置 ug后处理报警大全 ug法兰克后处理下载 ug后处理器如何设置 ug三轴后处理制作教程 法兰克ug后处理文件 ug后处理构造器

热门文章

  1. mininet在哪编写python脚本_1 mininet 简介及同时支持python2和python3
  2. java annotation应用_java Annotation的应用
  3. django框架中表单
  4. Java——demo之仿ATM操作
  5. IDEA、 JetBrains、webstorm、 pycharm 破解教程
  6. mac使用brew update无反应解决办法
  7. MySQL InnoDB存储引擎
  8. 教你在CorelDRAW中导入位图
  9. SBuild 0.1.4 发布,基于 Scala 的构建系统
  10. 深入探讨用位掩码代替分支(8):SSE指令集速度测试