Python从入门到高手7.4节-优雅的列表推导式

目录

7.4.1 什么是列表推导式?

7.4.2 列表推导式的基本结构

7.4.3 列表推导式的复杂结构

7.4.4 高山下的情歌


7.4.1 什么是列表推导式?

列表推导式,又叫列表解析式。所谓解析式,顾名思义,就是由已有的可迭代对象,来解析出一个新的列表。

迄今学过的可迭代类型有字符串,列表。可迭代对象可以在循环中进行迭代。在对可迭代对象中的元素进行迭代的过程中,我们可以对元素进行一定的处理,以生成一个新的列表。

在讲解列表推导式的基本结构之前,同学们先看一段代码,在for循环中为列表添加新的元素:

代码实例:

# __author__ = 薯条老师
# __desc__ = 在for循环中为列表添加新的元素# 定义一个空列表
numbers = []for n in range(100):if n % 2 != 0:# 如果当前元素是奇数,则添加进列表当中numbers.append(n)

我们在循环中判断当前元素是否为奇数,若为奇数,则添加进列表中。为简化列表的生成代码,我们可以使用列表解析式:

# __author__ = 薯条老师
# __desc__ = 使用列表解析式来生成一个新列表# 只需一行代码就可以生成一个包含奇数的列表
numbers = [_ for _ in range(100) if _ % 2 != 0 ]

与直接使用for循环来添加元素相比,列表解析式更加简洁和优雅。现在开始来详细地讲解Python中的列表推导式。

7.4.2 列表推导式的基本结构

列表推导式的基本结构如下:

[element for element in iterable]

element表示从可迭代对象iterable中迭代出的元素,从其基本结构可看出,列表推导式本质还是一个for循环,在for循环中每迭代一次,就会在列表中插入一个新的元素。

迄今学过的可迭代对象有字符串、列表,我们现在根据这两种可迭代对象来创建新的列表。

代码实例:

# __author__ = 薯条老师
# __desc__ = 在列表推导式中根据字符串,列表等可迭代对象创建新的列表# 1.根据字符串对象来创建一个新列表
characters = [_ for _ in "ABC"]
print(characters)
# 输出为:['A', 'B', 'C']# 2.根据列表对象来创建一个新列表
characters = [_ for _ in [1,2,3,4,5]]
print(characters)
# 输出为:[1, 2, 3, 4, 5]

列表推导式的基本结构很简单,现在通过嵌套的for循环和条件控制结构来对列表推导式的基本结构进行扩展。

7.4.3 列表推导式的复杂结构

(1) 包含嵌套for循环的列表推导式

语法结构如下:

[element for x in iterable for y in iterable]

element表示由元素x和元素y所生成的一个新的元素。iterable表示可迭代对象。为便于理解,我们可以将嵌套了for循环的列表推导式转换为普通的循环结构:

for x in iterable:for y in iterable:# 对元素x和y进行处理,生成一个新的元素# 例如对x和y进行相加element = x+y

代码实例:

# __author__ = 薯条老师
# __desc__ = 在嵌套了for循环的列表推导式中生成一个新的列表# 同学们在理解列表推导式式,可以将它们转换为普通的循环结构
numbers = [x+y for x in [1,2,3] for y in [1,2,3]]
print(numbers)# numbers的输出为:[2, 3, 4, 3, 4, 5, 4, 5, 6]

(2) 包含条件控制的列表推导式

语法结构如下:

[element for element in iterable if element...]

element是从可迭代对象iterable中迭代出的元素,然后通过if语句对该元素进行条件判断,如果元素符合条件,就添加到列表中。为便于理解,我们可以将包含条件控制的列表推导式转换为普通的循环结构:

for element in iterable:# 通过if来对元素进行条件控制# 例如当前的数字为奇数就添加进列表if element % 2 != 0:pass

代码实例:

# __author__ = 薯条老师
# __desc__ = 包含条件控制的列表推导式# 通过列表推导式生成一个只包含偶数的列表
numbers = [_ for _ in range(100) if _ % 2 == 0 ]

(3) 同时包含嵌套for循环和条件控制的复杂列表推导式

我们可以在列表推导式中同时使用嵌套for循环和条件控制,来组合成比较复杂的列表推导式。

直接看代码实例:

# __author__ = 薯条老师
# __desc__ = 在列表推导式中同时使用嵌套for循环和条件控制numbers = [x+y for x in [1,2,3] if x % 2 == 0 for y in [1,2,3] if y % 2 !=0]
"""
(1) 在外层的for循环中加了一个条件控制:if x % 2 == 0,表示筛选出偶数
(2) 在内存的for循环中加了一个条件控制:if x % 2 != 0,表示筛选出奇数
"""
print(numbers)# numbers的输出为:[3,5]

同学们在理解列表推导式时,可将其转换成普通的循环结构进行理解。以上文中的复杂列表推导式为例,其所对应的普通for循环代码为:

# __author__ = 薯条老师
# __desc__ = 将复杂的列表推导式转换成普通个循环结构numbers = []# 外层的for循环
for x in [1,2,3]:if x % 2 !=0:continue# 内层的for循环for y in [1,2,3]:if y % 2 == 0:continuenumbers.append(x+y)

代码实例-用列表推导式输出所有质数:

# __author__ = 薯条老师
# __desc__ = 通过列表推导式计算0到100之间的所有质数numbers = [x for x in range(2, 100) if 0 not in [x % y for y in range(2,x)]]"""
(1)质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数
(2)外层for循环用来遍历从2到100之间的所有自然数
(3)如果当前自然数不是质数,那么其与当前自然数范围内的数相余:[x%y for y in range(2,x)],则列表中一定存在一个元素为0的数
(4)在外层for循环再判断该列表是否包含0即可,如果包含0,说明不是质数
"""print(numbers)# numbers的输出为:[2,3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

7.4.4 高山下的情歌

跟薯条老师学后端开发,高级爬虫(JS逆向+安卓逆向),数据分析,大数据开发,量化交易,以及机器学习+深度学习算法。坚定自己的学习目标,保持学习的热情,那你成为高手只是时间问题。

薯条老师的学生在南方电网,林氏家居,京东,阿里等大厂。想系统学习Python和Java的同学,可以移步薯条老师的个人技术博客:薯条老师的个人技术博客http://www.chipscoco.com/ 对本节教程有任何不懂的同学,亦可在评论区中进行评论。薯条老师会详细解答你们提出的每一个问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/58730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows Qt 6安装Oracle QOCI SQL Driver插件

本文参考 QOCI for the Oracle Call Interface (OCI)。 Windows 打开 Qt 6.8.0 (MSVC 2022 64-bit)。 Setting up environment for Qt usage… Remember to call vcvarsall.bat to complete environment setup! 执行 "D:\Program Files\Microsoft Visual Studio\2022\E…

组合数计算及其性质

组合数计算示例 组合数 C 4 2 C_4^2 C42​表示从4个不同元素中选取2个元素的组合数,其计算公式为: C ( n , m ) n ! m ! ( n − m ) ! C(n,m)\frac{n!}{m!\times(n-m)!} C(n,m)m!(n−m)!n!​ 其中, n n n为总元素数, m m m为选…

书生实战营第四期-第二关python

一、任务1:完成Leetcode 383 1.代码 class Solution:def canConstruct(self,ransomNote: str, magazine: str) -> bool: # 创建一个字典来存储 magazine 中每个字符的出现次数 char_count {} # 遍历 magazine,统计每个字符的出现次数 for char…

计算机考研,选择西安交通大学还是哈工大?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 经过全面分析,2025年考研西安交通大学和哈尔滨工业大学计算机专业的报考难度对比如下: 西安交通大学计算机专业 > 哈尔滨工业大学计算机专业 对于想要报考985高校计算机专业但核心目标是优…

【ShuQiHere】数据科学与人工智能必备的 Python 包大全

【ShuQiHere】📚💡 在数据科学与人工智能的世界里,拥有一套强大的 Python 工具包可以让您的研究和项目事半功倍。本文将详细介绍这些必备的包,每个包都附有用途、特点、安装方式,以及实际的代码示例和学习资源&#x…

CentOS系统查看CPU、内存、操作系统等信息

Linux系统提供了一系列命令可以用来查看系统硬件信息,如CPU的物理个数、核数、逻辑CPU数量、内存信息和操作系统版本。 查看物理CPU、核数和逻辑CPU 在多核、多线程的系统中,了解物理CPU个数、每个物理CPU的核数和逻辑CPU个数至关重要。超线程技术进一步…

项目升级到.Net8.0 Autofac引发诡异的问题

前两天把项目升级到.Net8.0了,把.Net框架升级了,其他一些第三方库升级了一部分,升级完以后项目跑不起来了,报如下错误: An unhandled exception occurred while processing the request. DependencyResolutionExcepti…

完整了解asp.net core MVC中的数据传递

在ASP.NET Core MVC应用开发中,数据传递是构建高效、可靠Web应用的核心环节之一。它涵盖了从控制器到视图、不同请求之间以及与外部数据源交互等多个方面。正确掌握各种数据传递方式对于开发出性能优良、用户体验良好的应用程序至关重要。本文将全面深入地探讨ASP.N…

十八、【智能体】数据库:未来科技的大脑

在上一篇中我们讲到了 **变量 ** , 变量 的作用是保存用户个人信息,让 Bot记住用户的特征,使回复更加个性化。 上一篇内容为:https://blog.csdn.net/qq_40585384/article/details/143272599 但变量有一个缺点——存储的信息太单…

web文件包含include

php伪协议 在 PHP 中,伪协议(Pseudo Protocols) 也被称为 流包装器,这些伪协议以 php:// 开头,后面跟着一些参数,用于指定 要执行的操作 或 需要访问的资源。 伪协议表明这些协议并不是一个 真实的外部协议…

Diving into the STM32 HAL-----USART

如今,电子行业有许多串行通信协议和硬件接口可用。其中之一是通用同步/异步接收器/发射器接口,也简称为 USART。几乎每个微控制器都至少提供一个 UART 外设。几乎所有的 STM32 MCU 都提供至少两个 UART/USART 接口,但根据 MCU 封装支持的 I/O…

功能强大视频编辑软件 Movavi Video Editor Plus 2024 v24.2.0 中文特别版

Movavi Video Editor Plus中文修改版是一款功能强大的视频制作编辑软件,使用能够帮助用户快速从录制的素材中制作成一个精美的电影,支持进行视频剪辑,支持添加背影、音乐和各种音乐,软件使用简单,无需任何的经验和专业…

中国书画、

孙溟㠭浅析“古玺” “古玺”是秦以前印章的通称,远可追溯三代,兴盛于战国。古玺所用的文字是当时六国的篆书,也就是大篆,风格多种多样,变化不一,不容易认识。从文字形式上,可分阴文&#xff08…

WPF+MVVM案例实战(九)- 霓虹灯字效果控件封装实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、运行效果2、主菜单与界面实现1、主菜单2、霓虹灯字界面实现3、字体资源获取3、控件封装1.创建自定义控件2、依赖属性实现3、封装控件使用4、运行效果4、源代码获取1、运行效果 2、主菜单与界面实…

《JVM第6课》本地方法栈

文章目录 1 什么是本地方法1.1 本地方法的好处1.2 声明本地方法1.3 实现本地方法1. 生成头文件2. 编写C语言实现3. 编译C代码4. 运行Java程序 1.4 使用JNA1.5 总结 2 本地方法栈2.1 特点2.2 本地方法栈与Java虚拟机栈的区别2.3 本地方法栈的工作流程2.4 总结 无痛快速学习入门J…

Python酷库之旅-第三方库Pandas(183)

目录 一、用法精讲 846、pandas.api.types.is_number函数 846-1、语法 846-2、参数 846-3、功能 846-4、返回值 846-5、说明 846-6、用法 846-6-1、数据准备 846-6-2、代码示例 846-6-3、结果输出 847、pandas.api.types.is_re函数 847-1、语法 847-2、参数 847…

【SSM详细教程】-13-SpringMVC详解

精品专题: 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12789841.html?spm1001.20…

【WPF】用于图形绘制的三个重要类:Canvas 类,PathGeometry 类,Path 类

WPF中用于图形绘制的三个重要类:Canvas 类,PathGeometry 类,Path 类 Canvas 类PathGeometry 类Path 类各自异同 在WPF (Windows Presentation Foundation) 中,Canvas、PathGeometry 和 Path 是用于图形绘制的三个重要类。下面将分…

Harmony OS搭建广告展示页

有些app需要广告页,有的不需要,我们需要搞个配置。 1. 通过首选项配置存储我们的常用配置,比如是否需要广告页、广告页的路由地址、点击广告页跳转的链接以及广告页倒计时。 1.1 新建一个关于广告页的数据模型。 export class AdvertClass…

国内AI大模型学习平台

据不完全统计,目前,国内有几大AI大模型学习平台可供选择: 1.昇思大模型平台:这是一个集算法选型、创意分享、模型实验和大模型在线体验于一体的AI学习与实践社区。 2.魔搭社区:提供AI模型、数据集和应用的开发与探索平…