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

Python 中常见的数据结构之二推导式

Python 中常见的数据结构之二推导式

    • 使用推异式
      • 列表推导式
      • 字典推导式
      • 集合推导式

使用推异式

推导式是一种从已存在的序列中快速构建列表(list)、集合(set) 和 字典(dictionary)方式。Python 支持 3 种不同类型的推导式:

  • 列表推导式;
  • 字典推导式;
  • 集合推导式。

接下来,我就讲解这四种推导式。

列表推导式

列表推导式包括使用循环和条件语句(如果需要)创建动态列表。下面的几个例子将有助于理解推导式的概念,其中主要展示了怎么使用列表推式。请看例子,新创建的列表中的每个元素,是原来列表中相应表素加 1

list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list2 = [x + 1 for x in list1]
print(list1)
print(list2)

以上代码的输出结果是:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

上面的代码中,创建 list2 的代码,等价于下面的代码:

list2 = []
for x in list1:list2.append(x + 1)

在下面,这个第二个例子中,我们从原始的列表中创建了一个只包含偶数的新的列表,只需要简单地添加一个条件即可:

list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list2 = [x for x in list1 if x % 2 == 0]
print(list1)
print(list2

以上代码的输出结果是:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 2, 4, 6, 8]

可以看到,我们把条件添加到了推导式的结尾处。

字典推导式

字典也可以通过推导式创建。字典推导式和列表推导式类似,是一种从一个字典中创建另一个字典的方案。这种方案允许在原来的字典中选择满足条件的元素,创建新字典。请看下面的代码,我们从 dict1 中选择小于或等于200的元素,将 除以 2,和原来的一起放入新字典中。

dict1 = {'a':100, 'b':200, 'c':300}
dict2 = {x:int(y / 2) for (x, y) in dict1.items() if y <= 200}print(dict1)
print(dict2)

下面是输出结果:

{'a': 100, 'b': 200, 'c': 300}
{'a': 50, 'b': 100}

上面代码里的字典推导式等价于:

dict2 = {}
for x, y in dict1.items():if y <= 200:dict2[x] = int(y / 2)

使用推导式,可以显著地减少代码。

集合推导式

集合也可以通过推导式创建。集合推导式的语法,和列表推导式似,只是列现用方括号,集合用花括号,而已。请看下面的代码:

list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 4, 6, 8]
set1= {x + 1 for x in list1 if x % 2 == 0}
print(list1)
print(set1)

上面代码的输出结是:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 4, 6, 8]
{1, 3, 5, 7, 9}

可以看到,重复元素会被删除。

上面的推导式等价于下面的使用循环的代码:

set1 = set()
for x in list1:if x % 2 == 0:set1.add(x)

<完>

http://www.lryc.cn/news/515784.html

相关文章:

  • STM32 拓展 低功耗案例3:待机模式 (hal)
  • 【开源社区openEuler实践】探索 Yocto-Meta-OpenEuler:嵌入式开发的强大基石
  • C++ hashtable
  • JS (node) 的 ACM 模式 + debug方法 (01背包为例)
  • vue设计与实现-框架设计
  • Stable Diffusion和Midjourney有什么区别?
  • 即插即用,无痛增强模型生成美感!字节跳动提出VMix:细粒度美学控制,光影、色彩全搞定
  • 面向对象分析和设计OOA/D,UML,GRASP
  • 【每日学点鸿蒙知识】广告ID、NFC手机充值、CSS支持语法、PC与模拟器交互、SO热更新等
  • 30分钟学会HTML
  • 服务器信息整理:用途、操作系统安装日期、设备序列化、IP、MAC地址、BIOS时间、系统
  • Golang设计模式目录
  • 选择IT驻场外包公司,要找有哪些资质的公司
  • Java List 集合详解:基础用法、常见实现类与高频面试题解析
  • Arduino UNO 驱动1.8 TFT屏幕显示中文
  • Flink operator实现自动扩缩容
  • 分布式系统架构6:链路追踪
  • vite-plugin-imagemin安装问题
  • Git revert回滚
  • 永磁同步电机预测模型控制(MPC)
  • 【JAVA】switch ... case ... 的用法
  • 基于STM32的热带鱼缸控制系统的设计
  • Vue项目整合与优化
  • WinForm开发-自定义组件-1. 工具栏: UcompToolStrip
  • 法律专业legal case的留学论文写作技巧分析(1)
  • 2025编程技术前沿:探索最新的开发工具与趋势
  • sqlserver sql转HTMM邮件发送
  • GeoTrust True BusinessID Wildcard
  • R语言的数据结构
  • 安装和配置MySQL教程