白骑士的Python教学进阶篇 2.4 高级数据结构

系列目录

上一篇:白骑士的Python教学进阶篇 2.3 文件操作​​​​​​​

        在Python中,掌握高级数据结构可以显著提升你的编程效率和代码可读性。高级数据结构包括列表推导式、生成器与迭代器以及装饰器。本文将详细介绍这些高级数据结构,帮助你在实际编程中更好地运用它们。

列表推导式

        列表推导式(List Comprehensions)是Python的一种简洁的语法,用于生成新的列表。通过列表推导式,可以用一行代码表达复杂的列表生成逻辑,增强代码的可读性和简洁性。

基本语法

        列表推导式的基本语法如下:

[expression for item in iterable if condition]

        'expression':生成新列表中元素的表达式。

        ’item‘:从 ‘iterable’ 中取出的元素。

        'iterable':一个可迭代对象,如列表、元组、字符串等。

        ’condition‘:一个可选的过滤条件,只有满足条件的元素才会包含在新列表中。

示例

        生成平方数列表:

squares = [x ** 2 for x in range(10)]
print(squares)

        输出:

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

        过滤偶数并生成其平方:

even_squares = [x ** 2 for x in range(10) if x % 2 == 0]
print(even_squares)

        输出:

[0, 4, 16, 36, 64]

        使用嵌套循环生成二维坐标:

coordinates = [(x, y) for x in range(3) for y in range(3)]
print(coordinates)

        输出:

[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

生成器与迭代器

        生成器和迭代器是Python中用于高效处理大量数据的强大工具。它们可以在不占用大量内存的情况下生成序列数据。

迭代器

        迭代器是一种对象,它实现了迭代协议,包括 '__iter__()' 和 '__next__()' 方法。迭代器可以用于逐个访问集合的元素,而不需要一次性将所有元素加载到内存中。

示例

class MyIterator:def __init__(self, data):self.data = dataself.index = 0def __iter__(self):return selfdef __next__(self):if self.index >= len(self.data):raise StopIterationresult = self.data[self.index]self.index += 1return resultmy_iter = MyIterator([1, 2, 3])
for item in my_iter:print(item)

        输出:

1
2
3

生成器

        生成器是使用 'yield' 关键字的函数。每次调用生成器的 '__next__()' 方法时,生成器函数会运行到 'yield' 语句并返回结果,然后暂停,下一次调用时从暂停处继续执行。

示例

        简单生成器:

def simple_generator():yield 1yield 2yield 3gen = simple_generator()for value in gen:print(value)

        输出:

1
2
3

        无限斐波那契序列生成器:

def fibonacci():a, b = 0, 1while True:yield aa, b = b, a + bfib = fibonacci()for _ in range(10):print(next(fib))

        输出:

0
1
1
2
3
5
8
13
21
34

        生成器表达式是生成器的简写形式,类似于列表推导式,但使用小括号而不是方括号。

gen_exp = (x ** 2 for x in range(10))for value in gen_exp:print(value)

装饰器

        装饰器是一种高级函数,它允许你在不修改函数代码的前提下,增强或修改函数的行为。装饰器通常用于日志记录、权限检查、缓存等场景。

基本语法

        装饰器是一个返回函数的高阶函数,通常使用 '@decorator_name' 语法糖来应用装饰器。

示例

        基本装饰器:

def my_decorator(func):def wrapper():print("Something is happening before the function is called.")func()print("Something is happening after the function is called.")return wrapper@my_decorator
def say_hello():print("Hello!")say_hello()

        输出:

Something is happening before the function is called.
Hello!
Something is happening after the function is called.

        带参数的装饰器:

def repeat(num_times):def decorator_repeat(func):def wrapper(*args, **kwargs):for _ in range(num_times):result = func(*args, **kwargs)return resultreturn wrapperreturn decorator_repeat@repeat(num_times=3)
def greet(name):print(f"Hello, {name}!")greet("Alice")

        输出:

Hello, Alice!
Hello, Alice!
Hello, Alice!

        类装饰器:

class CountCalls:def __init__(self, func):self.func = funcself.num_calls = 0def __call__(self, *args, **kwargs):self.num_calls += 1print(f"Call {self.num_calls} of {self.func.__name__}")return self.func(*args, **kwargs)@CountCalls
def say_hello():print("Hello!")say_hello()
say_hello()

        输出:
 

Call 1 of say_hello
Hello!
Call 2 of say_hello
Hello!

结论

        高级数据结构如列表推导式、生成器与迭代器以及装饰器,是Python提供的强大工具,使开发者可以编写简洁、高效、可维护的代码。通过掌握这些高级特性,可以在实际项目中更灵活地处理复杂的数据操作,提高代码的执行效率,并且能够在不改变原有代码逻辑的情况下,轻松地扩展和增强功能。这些特性不仅提升了编程技能,也为解决实际问题提供了更多的解决方案。希望在实践中多多应用这些高级数据结构,享受Python编程的乐趣。

下一篇:白骑士的Python教学高级篇 3.1 多线程与多进程​​​​​​​

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

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

相关文章

算法刷题1-10大排序算法汇总

十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可…

服务器安装Nginx教程

1、安装所需依赖 yum -y install gcc gcc-c make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel 2、创建nginx目录并下载Nginx安装包 //进入/usr/local cd /usr/local//创建nginx目录 mkdir nginx//进入nginx目录 cd nginx//下载nginx tar包 wget http://…

Lesson 47 A cup of coffee

Lesson 47 A cup of coffee 词汇 like v. 喜欢,想要 用法:like 物品 / 人 喜欢……    like 动词ing 喜欢做……(习惯性)    like to 动词原形 喜欢做……(一次性) 例句:我喜欢小狗…

[leetcode hot 150]第五百三十题,二叉搜索树的最小绝对差

题目: 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数,其数值等于两值之差的绝对值。 解析: minDiffInBST 方法是主要方法。创建一个 ArrayList 来存储树的节点值。inorderTrave…

前端日常扫盲

一、js标签语句 直接上代码 for(let i 0; i < 10; i){console.log("顶层循环");for(let j 0; j < 10; j){console.log("内层循环",i,j);if(i * j > 30){console.log("退出顶层循环");break;}} }如上面的代码&#xff0c;双层循环&a…

opencv-yolo-tiny车辆检测 ----20240705

opencv-yolo-tiny 实现车辆检测 opencv.dnn模块已经支持大部分格式的深度学习模型推理,该模块可以直接加载tensorflow、darknet、pytorch等常见深度学习框架训练出来的模型,并运行推理得到模型输出结果。opecnv.dnn模块已经作为一种模型部署方式,应用在工业落地实际场景中。…

持续交付:自动化测试与发布流程的变革

目录 前言1. 持续交付的概念1.1 持续交付的定义1.2 持续交付的核心原则 2. 持续交付的优势2.1 提高交付速度2.2 提高软件质量2.3 降低发布风险2.4 提高团队协作 3. 实施持续交付的步骤3.1 构建自动化测试体系3.1.1 单元测试3.1.2 集成测试3.1.3 功能测试3.1.4 性能测试 3.2 构建…

(一)进程与线程

一、进程和线程的概念 1.1 进程 程序由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至CPU&#xff0c;数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的。当一个…

鸿蒙系统的开发与学习

1.开发工具的下载 DevEco Studio-HarmonyOS Next Beta版-华为开发者联盟 安装、环境配置时&#xff0c;建议 自定义目录 注意&#xff1a;路径中不要有 中文、特殊字符。 2.ArkTS基础总结 1&#xff09;三种数据类型 ① string 字符串&#xff1a;描述信息 ② number 数…

银联快捷支付的优点!

快速支付&#xff0c;又称电子支付或第三方支付&#xff0c;在行业中得到了广泛的应用。用户只需通过银行完成交易。方便快捷是指银行可以在任何条件下支持用户之间的转账、支付等即时结算服务。快速支付是指用户可以通过手机实现银行卡等相关操作。然而&#xff0c;现在大多数…

Java后端每日面试题(day1)

目录 JavaWeb三大组件依赖注入的方式Autowire和Resurce有什么区别&#xff1f;Spring Boot的优点Spring IoC是什么&#xff1f;说说Spring Aop的优点Component和Bean的区别自定义注解时使用的RetentionPolicy枚举类有哪些值&#xff1f;如何理解Spring的SPI机制&#xff1f;Spr…

听说现在AI产品经理薪资30k起步?0基础可以转行AI产品吗?

2024年&#xff0c;还有什么新风口&#xff1f; AI、元宇宙、NFT… 很多人不知道&#xff0c;其实不管是元宇宙还是NFT&#xff0c;它们本质上就是人工智能领域。 AI自身应用领域非常广泛&#xff0c;大批高薪岗位随之涌了出来&#xff0c;包括AI产品经理。 AI产品经历具体工…

CSS Float(浮动)

CSS Float(浮动) 概述 CSS Float(浮动)是一种布局技术,它允许开发人员将元素(如图片或文本)沿着其容器的左侧或右侧放置,并且让其他内容围绕它流动。这种技术在过去被广泛用于创建多栏布局,尽管现代CSS提供了更多高级的布局方法(如Flexbox和Grid),但理解浮动仍然…

【LeetCode:841. 钥匙和房间 + DFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

安卓手机已删除短信如何恢复?这2个技巧,找回离家出走的短信

手机宛如一座丰富的宝库&#xff0c;珍藏着生活中的点滴回忆。其中&#xff0c;短信作为沟通的桥梁&#xff0c;记录着我们与亲朋好友间的温情脉脉&#xff0c;承载着无数珍贵的瞬间。然而&#xff0c;有时&#xff0c;我们却会不慎触发宝库中的机关&#xff0c;使得这些宝贵的…

陈文自媒体:30岁房贷1000万,杠杠超乎想象!

首先写这个文章我要声明&#xff0c;这个内容没有传播负能量&#xff0c;没有传播所谓的焦虑&#xff0c;我只是想表达一下我的观点。 昨天的中金30岁女士的事件&#xff0c;我相信很多网友都知道了&#xff0c;已经上了热搜了。 简单总结一下原因&#xff0c;据说是她和老公…

【计算智能】遗传算法(二):基本遗传算法在优化问题中的应用【实验】

前言 本系列文章架构概览&#xff1a; 本文将介绍基本遗传算法在解决优化问题中的应用,通过实验展示其基本原理和实现过程&#xff1a;选取一个简单的二次函数作为优化目标&#xff0c;并利用基本遗传算法寻找其在指定范围内的最大值。 2. 基本遗传算法&#xff08;SGA&#x…

面试公司的时候一般要问HR的问题和关注的福利待遇(比较重要,亲测)

1.问是否双休&#xff0c;是否有五险一金 2.问福利待遇&#xff0c;是否包吃住&#xff0c;是否有班车及补贴等 3.是否加班 4.是否有健身房&#xff0c;食堂等设施 5.是否出差&#xff0c;在哪个城市 6.工作地点能不能选择 7.晋升机会怎么样&#xff0c;什么时候才能晋升&#…

从0构建一款appium-inspector工具

上一篇博客从源码层面解释了appium-inspector工具实现原理&#xff0c;这篇博客将介绍如何从0构建一款简单的类似appium-inspector的工具。如果要实现一款类似appium-inspector的demo工具&#xff0c;大致需要完成如下六个模块内容 启动 Appium 服务器连接到移动设备或模拟器启…

vue 中 使用腾讯地图 (动态引用腾讯地图及使用签名验证)

在设置定位的时候使用 腾讯地图 选择地址 在 mounted中引入腾讯地图&#xff1a; this.website.mapKey 为地图的 key // 异步加载腾讯地图APIconst script document.createElement(script);script.type text/javascript;script.src https://map.qq.com/api/js?v2.exp&…