当前位置: 首页 > news >正文

Python高级语法

Python高级语

  • 1 列表推导式
    • 1.1 什么是列表推导式
    • 1.2 列表推导式的使用
  • 2 字典推导式
    • 2.1 什么是字典推导式
    • 2.2 字典推导式的使用
  • 3 元组推导式
  • 4 集合推导式
  • 5 三元表达式
    • 5.1 什么是三元表达式
    • 5.2 三元表达式的使用

1 列表推导式

1.1 什么是列表推导式

列表推导式的英文(list cmprehension)是Python独有的一种语法结构,它将推导式(又称解析式)得到的各个结果组成一个新个列表,是一种非常简洁的创建列表的语法,适用于所有需要列表的场景。语法格式如下:

[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]]

1.2 列表推导式的使用

  • 优化简单for循环

for 循环代码

>>> list_1 = ['a', 'b', 'c']
>>> list_2 = []
>>> for i in list_1:
>>>     list_2.append(i * 2)>>> print(list_2)
['aa', 'bb', 'cc']

列表推导式写法

>>> list_1 = ['a', 'b', 'c']
>>> list_2 = [i * 2 for i in list_1]
>>> print(list_2)
['aa', 'bb', 'cc']# 若不想取list_1列表中的全部元素,可用if语句做过滤条件,可迭代变量也可用于if语句中
>>> list_2 = [i * 2 for i in list_1 if i != 'b']
>>> print(list_2)
['aa', 'cc']
  • 优化两层for循环
>>> list_1 = [(m, n) for m in range(3) for n in range(3)]
>>> print(list_1)
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

多层for循环一样支持if语句

>>> list_1 = [(m, n) for m in range(3) if m > 1 for n in range(3) if n > 1]
>>> print(list_1)
[(2, 2)]
>>> list_1 = [(m, n) for m in range(3) if m > 1 for n in range(3)]
>>> print(list_1)
[(2, 0), (2, 1), (2, 2)]
>>> list_1 = [(m, n) for m in range(3) for n in range(3) if m > 1 and n > 1]
>>> print(list_1)
[(2, 2)]
  • 列表推导式支持嵌套
>>> list_1 = [n + 2 for n in [m + 1 for m in range(3)]]
>>> print(list_1)
[3, 4, 5]

2 字典推导式

2.1 什么是字典推导式

字典推导式的概念与列表推导式一样,只不过返回的结果是字典。语法格式如下:

{键:值 for 迭代变量 in 可迭代对象 [if 条件表达式]}

2.2 字典推导式的使用

注意:字典中不能出现同名的 key,第二次出现就把第一个值覆盖掉了,因此 value 都是 1

>>> dict_1 = {key: value for key in range(3) for value in range(2)}
>>> print(dict_1)
{0: 1, 1: 1, 2: 1}
>>> dict_1 = {key: value for key in range(3) for value in range(3)}
>>> print(dict_1)
{0: 2, 1: 2, 2: 2}

常用场景,遍历一个具有键值关系的可迭代对象

>>> tuple_list = [('name', '张三'), ('age', 28),('class', '9701'), ('like', 'python')]
>>> dict_1 = {key: value for key, value in tuple_list}
>>> print(dict_1)
{'name': '张三', 'age': 28, 'class': '9701', 'like': 'python'}

3 元组推导式

与列表和字典推导式不同的是它不是返回一个元组,而是返回一个生成器对象,也可以叫生成器推导式,示例如下:

>>> tuple_1 = (i for i in range(5))
>>> print(tuple_1)
<generator object <genexpr> at 0x000002097F25F1D0>

并没有像我们想像的那样返回(0, 1, 2, 3, 4)这样的元组,若需返回元组加上转换函数即可:

>>> tuple_1 = (i for i in range(5))
>>> print(tuple(tuple_1))
(0, 1, 2, 3, 4)

4 集合推导式

集合推导式需要注意的是,集合是无序的,在使用时会自动去掉重复的元素。

>>> set_1 = {i for i in 'HelloWorld'}
>>> print(set_1)
{'d', 'W', 'e', 'r', 'o', 'H', 'l'}

5 三元表达式

5.1 什么是三元表达式

Python中没有像C或Java语言中的三元表达式(三目运算符)的概念,但也有类似的语法,格式如下:

if条件为True执行语句 if 条件表达式 else if条件为False执行语句

5.2 三元表达式的使用

  • 简化 if 语句
# 原 if 语句
age = 30
if age >= 18 :rs = "成年"
else:rs = "未成年"# 使用三元表达式
age = 30
rs = "成年" if age >= 18 else "未成年"
  • 返回多个语句
age = 30
rs = "成年", "大于18岁" if age >= 18 else "未成年"
print(rs)
  • 在函数中使用三元表达式
def e_num(num):return True if num % 2 == 0 else False
  • 三元表达式与 lambda一起使用
# 返回两个数的最大值
>>> max = lambda a, b: a if a > b else b
>>> print(max(10, 15))
15
>>> print(max(88, 15))
88
http://www.lryc.cn/news/320855.html

相关文章:

  • HTML5语义化元素
  • Android 性能优化——APP启动优化
  • 计算机网络:TCP篇
  • 【NLP11-迁移学习】
  • Android11 FallbackHome启动和关闭流程分析
  • elasticsearch-java api 8 升级
  • HCIA_IP路由基础问题?
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • 高架学习笔记之信息系统分类概览
  • 2023新版mapinfo美化电子地图 新版2013Arcgis shp电子地图 下载
  • BUUCTF-Ezsql1
  • LiveGBS流媒体平台GB/T28181功能-大屏播放上大屏支持轮巡播放分屏轮巡值守播放监控视频轮播大屏轮询播放轮播
  • npm和pnpm安装、更换镜像源
  • springcloud 复习day1~[自动装配]
  • 模块化开发在不同编程语言中的实现方式有何异同?并以LabVIEW为例进行说明
  • 外贸网站文章批量生成器
  • maven一点通
  • 超越标签的探索:K-means与DBSCAN在数据分析中的新视角
  • linux板子vscode gdb 远程调试
  • nginx代理服务器配置
  • 基于Matlab的视频人面检测识别,Matalb实现
  • VSCode创建用户代码片段-案例demo
  • 河南大学-数字图像处理-图像变换
  • 华为OD七日集训第3期 - 按算法分类,由易到难,循序渐进,玩转OD
  • Android中的进程间通讯
  • day03vue学习
  • 32. 最长有效括号
  • 如何在 docker 容器内部运行 docker命令
  • Poly Kernel Inception Network在遥感检测中的应用
  • tiktok 与 赵长鹏 遭遇了什么