IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 推导式语法及序列解包 -> 正文阅读

[数据结构与算法]推导式语法及序列解包

一、列表推导式

推导式是可以从一个数据序列构建另一个新的数据序列。列表推导式,采用简洁方式对列表或其他可迭代对象的元素进行遍历、过滤或再计算,快速生成满足特定需求的新序列。

列表推导式语法形式:

[expression for expr1 in sequence1 if condition1

????????????????????????for expr2 in sequence2 if condition2

????????????????????????????????for expr3 in sequence3 if condition3

......]

>>> alist = [ x**x for x in range(6)]
>>> alist
[1, 1, 4, 27, 256, 3125]
>>> blist = []
>>> for x in range(6):
...     blist.append(x**x)
...
>>> blist
[1, 1, 4, 27, 256, 3125]
>>> alist == blist
True

?逻辑上,列表推导式等价于循环结构。列表推导式功能强大,可实现嵌套列表的平铺,过滤指定元素,同时遍历多个迭代对象,实现矩阵转置等等。

推导式不仅适用于列表,Python还支持使用于字典,集合。

1、实现嵌套列表平铺

>>> alist = [[1,2,3],[4,5,6],[7,8,9]]
>>> [num for elem in alist for num in elem]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

2、过滤不符合条件的元素

>>> alist = [5,6,7,8,4,2,11,14]
>>> [num for num in alist if num%2==0]
[6, 8, 4, 2, 14]

3、同时遍历多个可迭代对象

>>> [(x,y) for x in [2,5,6,7,1,11] for y in [3,4,7,1,11] if x==y]
[(7, 7), (1, 1), (11, 11)]

4,列表推导式实现矩阵转置

>>> matrix = [[4,1,2,5],[6,8,2,4],[6,4,1,8]]
>>> [[row[i] for row in matrix] for i in range(4)]
[[4, 6, 6], [1, 8, 4], [2, 2, 1], [5, 4, 8]]

二、生成器推导式

生成器推导式与列表推导式在用法上非常相似,形式上生成器推导式以圆括号为定界符,生成器推导式的结果是一个生成器对象,而不是列表,也不是元组。

生成器推导式具有惰性求值的特点。使用生成器推导式时,可以选择将其转化为列表或者元组形式,或者使用生成器对象的__next__()的办法(或内置函数next())进行遍历。

在遍历元素时,只能从前往后正向访问无法重新访问已访问过的元素,特殊的是不支持使用下标方式来访问其对象元素。若需要继续访问,必须重新构建该生成器对象。

>>> agoal = (x**x for x in range(6))    #构建生成器推导式对象
>>> agoal
<generator object <genexpr> at 0x000001B993949A10>
>>> list(agoal)
[1, 1, 4, 27, 256, 3125]
>>> agoal.__next__()    #已访问结束,无法重新访问
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>> agoal = (x**x for x in range(6))    #重新构建
>>> next(agoal)
1

三、序列解包功能

?序列解包,是Python中一个非常重要的功能,巧妙使用能可提高代码的高效性和可读性。序列解包适用于range()可迭代对象,列表,字典,enumerate对象,zip对象等。其中注意,序列解包对字典默认是对“键”操作,item()方法可以实现对“键:值”操作。

>>> keys = ['a','b','c','d']
>>> values = [1,2,3,4]
>>> for akey,aval in zip(keys,values):
...     print((akey,aval),end=' ')
...
('a', 1) ('b', 2) ('c', 3) ('d', 4) 
>>> x,y,z = range(3)
>>> y
1
>>> ad,*bd,cd = 14,12,13,41
>>> bd
[12, 13]

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 12:10:13  更:2022-01-28 12:10:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 19:56:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码