Python高级语法

Python高级语

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

1 列表推导式

1.1 什么是列表推导式

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

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

1.2 列表推导式的使用

  • 优化简单for循环

for 循环代码

bash 复制代码
>>> list_1 = ['a', 'b', 'c']
>>> list_2 = []
>>> for i in list_1:
>>>     list_2.append(i * 2)

>>> print(list_2)
['aa', 'bb', 'cc']

列表推导式写法

bash 复制代码
>>> 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循环
bash 复制代码
>>> 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语句

bash 复制代码
>>> 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)]
  • 列表推导式支持嵌套
bash 复制代码
>>> 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

bash 复制代码
>>> 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}

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

bash 复制代码
>>> 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 元组推导式

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

bash 复制代码
>>> tuple_1 = (i for i in range(5))
>>> print(tuple_1)
<generator object <genexpr> at 0x000002097F25F1D0>

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

bash 复制代码
>>> tuple_1 = (i for i in range(5))
>>> print(tuple(tuple_1))
(0, 1, 2, 3, 4)

4 集合推导式

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

bash 复制代码
>>> 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 语句
bash 复制代码
# 原 if 语句
age = 30
if age >= 18 :
    rs = "成年"
else:
    rs = "未成年"

# 使用三元表达式
age = 30
rs = "成年" if age >= 18 else "未成年"
  • 返回多个语句
bash 复制代码
age = 30
rs = "成年", "大于18岁" if age >= 18 else "未成年"
print(rs)
  • 在函数中使用三元表达式
bash 复制代码
def e_num(num):
    return True if num % 2 == 0 else False
  • 三元表达式与 lambda一起使用
bash 复制代码
# 返回两个数的最大值
>>> max = lambda a, b: a if a > b else b
>>> print(max(10, 15))
15
>>> print(max(88, 15))
88
相关推荐
TechWayfarer8 分钟前
Cloudflare 9·15新政倒计时:用IP风险画像识别AI爬虫,防止误伤Googlebot
网络·人工智能·爬虫·python·tcp/ip·网络安全
禹凕26 分钟前
滑动窗口算法实战指南
python·算法
论文复现现场1 小时前
RTX 4090 24GB 能跑 Qwen3.8-27B 吗?单卡显存计算与云端部署指南
人工智能·python·云计算·llama·gpu算力
Patrick在香港1 小时前
模型路由器实测:12 个任务省 77%,旗舰过载时的降级要打出显式标记
python·llm·智能路由器·api·架构设计·成本优化
Looooking1 小时前
Python 之 jwt 令牌生成和校验
python·jwt
天下无敌笨笨熊2 小时前
C#Modbus串口开发心得
开发语言·c#
电商API_180079052472 小时前
电商商品价格监控工具淘宝京东商品价格抓取API项目实操分享
java·大数据·开发语言·前端·数据挖掘
zzzll11112 小时前
深度剖析:HashMap 并发死循环与 ConcurrentHashMap 两代演进全解
java·开发语言
如意猴2 小时前
【C++】001--C++入门(1)
开发语言·c++
传奇开心果编程2 小时前
【Rust入门知识点学与练】第10课:Option 和 Result(错误处理入门)
开发语言·学习·rust