【Python学习】数据结构+正则表达式

个人主页:Yang-ai-cao
系列专栏:Python学习
博学而日参省乎己,知明而行无过矣

     

目录

个人主页:Yang-ai-cao

系列专栏:Python学习

博学而日参省乎己,知明而行无过矣

数据结构

一、列表(List)   列表是Python中最常用的数据结构之一。它是一个有序的、可变的集合,可以包含任意类型的元素。

1、创建列表

2、访问列表元素

3、修改列表

二、元组(Tuple)元组是一个有序的、不可变的集合。一旦创建,元组中的元素不能被修改。

1、创建元组

2、访问元组元素

三、集合(Set)集合是一个无序的、不可重复的元素集合。集合主要用于去重和集合运算。

1、创建集合

2、集合操作

四、字典(Dictionary)字典是一个无序的键值对集合。键必须是唯一的,通常是字符串,但也可以是其他不可变类型。

1、创建字典

2、访问和修改字典

五、列表推导式(List Comprehension)列表推导式是一种简洁的创建列表的方式,通常用于生成新的列表。

  示例

六、字典推导式(Dictionary Comprehension)字典推导式是一种简洁的创建字典的方式。

示例

以上我们学习了Python中常见数据结构,接下来我们基于以上基础,进行栈、队列等的学习。

七、栈(Stack)栈是一种后进先出(LIFO, Last In First Out)的数据结构。最常见的操作是压栈(push)和弹栈(pop)。

1、使用列表实现栈   在Python中,我们可以使用列表来实现栈,因为列表支持在末尾添加和删除元素。

2、 栈的基本操作

八、 队列(Queue)队列是一种先进先出(FIFO, First In First Out)的数据结构。最常见的操作是入队(enqueue)和出队(dequeue)。

1、使用"collections.deque"实现队列虽然列表也可以用来实现队列,但"collections.deque"(双端队列)更为高效,因为它在两端的插入和删除操作都是O(1)时间复杂度。

2、队列的基本操作

3、双端队列(Deque)双端队列是一种可以在两端进行插入和删除操作的队列。"collections.deque"提供了这种数据结构。

4、优先队列(Priority Queue)优先队列是一种每个元素都有优先级的数据结构。出队时总是优先级最高的元素先出队。可以使用"heapq"模块实现优先队列。

正则表达式

九、正则表达式简介正则表达式是一种强大的字符串匹配工具,用于搜索、匹配和操作文本。它们由一系列字符和特殊符号组成,可以用于复杂的文本处理任务。

1、 Python中的正则表达式模块:"re"Python提供了"re"模块来处理正则表达式。我们可以使用这个模块来执行各种正则表达式操作。

2、常用函数

"re.match()""re.match()"从字符串的起始位置进行匹配,如果匹配成功,返回一个匹配对象,否则返回"None"。

"re.search()""re.search()"在整个字符串中搜索第一个匹配,如果匹配成功,返回一个匹配对象,否则返回"None"。

"re.findall()""re.findall()"返回字符串中所有非重叠的匹配。

"re.finditer()""re.finditer()"返回一个迭代器,包含字符串中所有非重叠的匹配对象。

"re.sub()""re.sub()"用于替换匹配的字符串。

"re.split()""re.split()"根据匹配的模式拆分字符串。

接下来鄙人会举些实际运用的例子,帮助你来理解。

3、示例一:验证电子邮件地址以下是使用正则表达式验证电子邮件地址的示例:

4、示例二:提取URL中的域名以下是使用正则表达式提取URL中域名的示例:


在现代编程中,数据结构和正则表达式是两个核心概念,它们在处理复杂数据和高效文本处理方面发挥着至关重要的作用。无论你是初学者还是有经验的开发者,掌握这些概念都将极大地提升你的编程技能和解决问题的能力。

数据结构

    ~  数据结构是组织和存储数据的方式,它们决定了数据的存取和操作效率。

    ~  不同的数据结构适用于不同的应用场景,选择合适的数据结构可以显著提高程序的性能和可维护性。

一、列表(List)
   列表是Python中最常用的数据结构之一。它是一个有序的、可变的集合,可以包含任意类型的元素。

1、创建列表
# 创建一个空列表
empty_list = []# 创建一个包含元素的列表
fruits = ['apple', 'banana', 'cherry']
2、访问列表元素
# 通过索引访问元素
first_fruit = fruits[0]  # 'apple'
#从0开始
3、修改列表
# 修改元素
fruits[1] = 'blueberry'  # ['apple', 'blueberry', 'cherry']# 添加元素
fruits.append('date')  # ['apple', 'blueberry', 'cherry', 'date']# 删除元素
fruits.remove('blueberry')  # ['apple', 'cherry', 'date']

二、元组(Tuple)
元组是一个有序的、不可变的集合。一旦创建,元组中的元素不能被修改。

1、创建元组
# 创建一个空元组
empty_tuple = ()# 创建一个包含元素的元组
coordinates = (10, 20)
2、访问元组元素
# 通过索引访问元素
x = coordinates[0]  # 10

三、集合(Set)
集合是一个无序的、不可重复的元素集合。集合主要用于去重和集合运算。

1、创建集合
# 创建一个空集合
empty_set = set()# 创建一个包含元素的集合
unique_numbers = {1, 2, 3, 3, 4}  # {1, 2, 3, 4}
2、集合操作
# 添加元素
unique_numbers.add(5)  # {1, 2, 3, 4, 5}# 删除元素
unique_numbers.remove(3)  # {1, 2, 4, 5}# 集合运算
another_set = {4, 5, 6}
intersection = unique_numbers & another_set  # {4, 5}

四、字典(Dictionary)
字典是一个无序的键值对集合。键必须是唯一的,通常是字符串,但也可以是其他不可变类型。

1、创建字典
# 创建一个空字典
empty_dict = {}# 创建一个包含键值对的字典
person = {'name': 'Alice', 'age': 25}
2、访问和修改字典
# 访问值
name = person['name']  # 'Alice'# 修改值
person['age'] = 26# 添加键值对
person['city'] = 'New York'# 删除键值对
del person['age']

五、列表推导式(List Comprehension)
列表推导式是一种简洁的创建列表的方式,通常用于生成新的列表。

  示例

# 创建一个包含0到9的列表
numbers = [x for x in range(10)]  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]# 创建一个包含0到9的平方的列表
squares = [x**2 for x in range(10)]  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# 带条件的列表推导式
even_numbers = [x for x in range(10) if x % 2 == 0]  # [0, 2, 4, 6, 8]

六、字典推导式(Dictionary Comprehension)
字典推导式是一种简洁的创建字典的方式。

示例

# 创建一个字典,其中键是0到9,值是键的平方
squares_dict = {x: x**2 for x in range(10)}  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}# 带条件的字典推导式
even_squares_dict = {x: x**2 for x in range(10) if x % 2 == 0}  # {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}

以上我们学习了Python中常见数据结构,接下来我们基于以上基础,进行栈、队列等的学习。

七、栈(Stack)
栈是一种后进先出(LIFO, Last In First Out)的数据结构。最常见的操作是压栈(push)和弹栈(pop)。

1、使用列表实现栈
   在Python中,我们可以使用列表来实现栈,因为列表支持在末尾添加和删除元素。
# 创建一个空栈
stack = []# 压栈(添加元素)
stack.append(1)
stack.append(2)
stack.append(3)# 弹栈(移除并返回最后一个元素)
top_element = stack.pop()  # 3
2、 栈的基本操作
# 检查栈是否为空
is_empty = len(stack) == 0
# 查看栈顶元素(不移除)
top_element = stack[-1] if not is_empty else None

八、 队列(Queue)
队列是一种先进先出(FIFO, First In First Out)的数据结构。最常见的操作是入队(enqueue)和出队(dequeue)。

1、使用"collections.deque"实现队列
虽然列表也可以用来实现队列,但"collections.deque"(双端队列)更为高效,因为它在两端的插入和删除操作都是O(1)时间复杂度。
from collections import deque# 创建一个空队列
queue = deque()# 入队(添加元素)
queue.append(1)
queue.append(2)
queue.append(3)# 出队(移除并返回第一个元素)
first_element = queue.popleft()  # 1
2、队列的基本操作
# 检查队列是否为空
is_empty = len(queue) == 0
# 查看队首元素(不移除)
front_element = queue[0] if not is_empty else None

3、双端队列(Deque)
双端队列是一种可以在两端进行插入和删除操作的队列。"collections.deque"提供了这种数据结构。

基本操作

from collections import deque# 创建一个双端队列
deque_obj = deque()# 在右端添加元素
deque_obj.append(1)
deque_obj.append(2)# 在左端添加元素
deque_obj.appendleft(0)# 在右端删除元素
right_element = deque_obj.pop()  # 2# 在左端删除元素
left_element = deque_obj.popleft()  # 0
4、优先队列(Priority Queue)
优先队列是一种每个元素都有优先级的数据结构。出队时总是优先级最高的元素先出队。可以使用"heapq"模块实现优先队列。
import heapq# 创建一个空优先队列
priority_queue = []# 入队(添加元素)
heapq.heappush(priority_queue, (1, 'task1'))  # (优先级, 元素)
heapq.heappush(priority_queue, (3, 'task3'))
heapq.heappush(priority_queue, (2, 'task2'))# 出队(移除并返回优先级最高的元素)
highest_priority_task = heapq.heappop(priority_queue)  # (1, 'task1')


       通过以上的示例,我们可以看到如何在Python中实现和使用栈、队列、双端队列和优先队列。每种数据结构都有其独特的特点和适用场景:

    -            栈:用于需要后进先出(LIFO)的场景,比如函数调用栈、撤销操作等。
    -        队列:用于需要先进先出(FIFO)的场景,比如任务调度、消息队列等。
    - 双端队列:提供在两端进行插入和删除操作的灵活性。
    - 优先队列:用于需要按优先级处理元素的场景,比如任务调度、路径搜索等。

正则表达式

   正则表达式是一种强大的文本处理工具,用于搜索、匹配和操作字符串。它们由一系列字符和特殊符号组成,可以用于解决复杂的文本处理任务。正则表达式在数据验证、格式化、解析等方面具有广泛的应用。

九、正则表达式简介
正则表达式是一种强大的字符串匹配工具,用于搜索、匹配和操作文本。它们由一系列字符和特殊符号组成,可以用于复杂的文本处理任务。

1、 Python中的正则表达式模块:"re"
Python提供了"re"模块来处理正则表达式。我们可以使用这个模块来执行各种正则表达式操作。
# 导入`re`模块import re
#匹配模式
- `.`:匹配任意单个字符(除换行符)
- `^`:匹配字符串的开头
- `$`:匹配字符串的结尾
- `*`:匹配前面的字符零次或多次
- `+`:匹配前面的字符一次或多次
- `?`:匹配前面的字符零次或一次
- `{n}`:匹配前面的字符恰好n次
- `{n,}`:匹配前面的字符至少n次
- `{n,m}`:匹配前面的字符至少n次,至多m次
- `[]`:匹配括号内的任意一个字符
- `|`:匹配左右任意一个表达式
- `()`:分组匹配
2、常用函数
"re.match()"
"re.match()"从字符串的起始位置进行匹配,如果匹配成功,返回一个匹配对象,否则返回"None"。
pattern = r'^Hello'
text = 'Hello, world!'match = re.match(pattern, text)
if match:print("Match found:", match.group())
else:print("No match found")
"re.search()"
"re.search()"在整个字符串中搜索第一个匹配,如果匹配成功,返回一个匹配对象,否则返回"None"。
pattern = r'world'
text = 'Hello, world!'search = re.search(pattern, text)
if search:print("Match found:", search.group())
else:print("No match found")
"re.findall()"
"re.findall()"返回字符串中所有非重叠的匹配。
pattern = r'\d+'
text = 'There are 123 apples and 456 oranges.'matches = re.findall(pattern, text)
print("All matches:", matches)  # ['123', '456']
"re.finditer()"
"re.finditer()"返回一个迭代器,包含字符串中所有非重叠的匹配对象。
pattern = r'\d+'
text = 'There are 123 apples and 456 oranges.'matches = re.finditer(pattern, text)
for match in matches:print("Match found:", match.group())
"re.sub()"
"re.sub()"用于替换匹配的字符串。
pattern = r'apples'
replacement = 'bananas'
text = 'I like apples.'result = re.sub(pattern, replacement, text)
print("Replaced text:", result)  # 'I like bananas.'
"re.split()"
"re.split()"根据匹配的模式拆分字符串。
pattern = r'\s+'
text = 'Split this text by spaces.'result = re.split(pattern, text)
print("Split result:", result)  # ['Split', 'this', 'text', 'by', 'spaces.']

接下来鄙人会举些实际运用的例子,帮助你来理解。

3、示例一:验证电子邮件地址
以下是使用正则表达式验证电子邮件地址的示例:

import redef validate_email(email):pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'return re.match(pattern, email) is not Noneemail = 'example@example.com'
if validate_email(email):print("Valid email address")
else:print("Invalid email address")

4、示例二:提取URL中的域名
以下是使用正则表达式提取URL中域名的示例:

import redef extract_domain(url):pattern = r'https?://(www\.)?([^/]+)'match = re.search(pattern, url)if match:return match.group(2)return Noneurl = 'https://www.example.com/path/to/page'
domain = extract_domain(url)
print("Domain:", domain)  # 'example.com'

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

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

相关文章

风电机组与风力发电机:它们是同一个东西吗?

风电机组与风力发电机:它们是同一个东西吗? 风电机组和风力发电机是两个常见的术语,尤其是在可再生能源领域。虽然这两个术语有时会被混淆使用,但它们实际上指的是不同的设备和系统。为了弄清楚它们之间的关系,本文将…

最近很火的 ChatTTS项目,有大佬做的 ChatTTS-UI 来啦

地址:https://github.com/jianchang512/ChatTTS-ui 》》》更多开源项目 ChatTTS webUI & API 一个简单的本地网页界面,直接在网页使用 ChatTTS 将文字合成为语音,支持中英文、数字混杂,并提供API接口。 Releases中可下载Wi…

光伏并网逆变器UL 1741:2021标准解析

光伏并网逆变器UL 1741:2021标准解析 不同国家的安规认证可以说是光伏逆变器走向国际市场的一张通行证,由于全球各国家的电网制式及并网政策的不同差异,这对逆变器测试顺利的通过安规测试认证 还是有一定的技术难度,也是中国光伏制造企业迫切…

最全解析:只有了解低代码平台的今生前世,才能明白低代码是什么

低代码(Low-Code)是一种软件开发方法,它使得开发人员能够通过图形界面、拖放组件和模型驱动的逻辑,快速地构建和部署应用程序,而无需编写大量的代码。尽管低代码这个术语是在2014年才提出,从诞生之初距今不…

【数据结构】复杂度的重要性—–决定程序运行的效率

【数据结构】复杂度的重要性—–决定程序运行的效率 前言 在我们写算法的时候,常常会需要考虑一个问题:这个算法好不好?而这个“好”实际上就取决于是算法的复杂度。 算法复杂度(Algorithmic Complexity)是指算法在编…

如何在电脑上安装两个flutter版本

Flutter Version Manager (FVM): Flutter的版本管理终极指南 Mac的flutter多版本管理之fvm的安装及使用 一、安装fvm brew tap leoafarias/fvm brew install fvm这个错误可能是由于网络问题或者 Git 配置问题导致的,我开启了梯子就可以了 brew install watchman…

Low Memory Killer in Android

目录 低内存管理(Linux vs Android) Linux内存回收 shrink_slab原理 shrink_zone原理 oom killer oom killer设计原则 OOM killer具体实现 android的lmk(Low Memory Killer) Android系统特点 oom killer在android中的不足 ​​​​​​​LMK概…

基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用

背景 随着互联网服务的广泛普及与技术应用的深入发展,日志数据作为记录系统活动、用户行为和业务操作的宝贵资源,其价值愈发凸显。然而,当前海量日志数据的产生速度已经远远超出了传统数据分析工具的处理能力,这不仅要求我们具备…

【机器学习】机器学习与AI大数据的融合:开启智能新时代

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 机器学习与AI大数据的融合 📒1. 引言📕2. 机器学习与大数据🎩机器学习与大数据的特征🎈大数据如…

驱动开发之platform总线

1.前言 在前面的实验以及提出的各种问题中,为了提高移植性,降低模块耦合度,提让模块高内聚,分离device与driver是一个必然的趋势了。为了解决这个问题,心心念念的platform总线出来。 linux从2.6起就加入了一套新的驱…

python中利用cartopy库绘制SST图像

1. Cartopy简介 Cartopy 是一个开源的 Python 库,用于绘制地图和地理数据分析。它结合了 matplotlib 的绘图功能和 shapely、pyproj 等库的地理空间数据处理能力,为用户提供了在地图上可视化数据的强大工具。 以下是 Cartopy 的一些主要特点和功能&#…

探索不同类型的“低”之魅力

随着数字化转型的浪潮不断高涨,低代码平台(LCDP)已逐渐成为企业快速构建和迭代应用程序的重要工具。低代码平台以其高效、灵活和易于集成的特点,受到越来越多企业的青睐。然而,低代码平台并非一蹴而就的单一产品&#…

CST电磁仿真软件表面等离子极化激元SPP --- 一维光栅耦合 - 衍射模式, 效率, Floquet端口

这两期我们看一下衍射光栅的高阶衍射、衍射效率、反射率。具体到仿真设置,就是Floquet端口的模式分析,S参数与衍射效率和反射率的关系。那么研究这些衍射和表面等离子极化激元SPP有什么关系呢?关系可大了,光栅是一种能够用来激励出…

告别鼠标,安卓模拟鼠标,绘图板,手写板操作电脑PC端,卡卡罗特也说好,儿童节快乐

家人们,上链接了:https://download.csdn.net/download/jasonhongcn/89387887 横屏模式: 竖屏模式: 操作说明: 1. 手势滑动模拟鼠标移动 2. 界面如果有滚动条,右手指按紧,通过左手指移动实现…

力扣:101. 对称二叉树

101. 对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false提示: …

mysql DDL——增删改

简略版: 文字化: 1.对全部字段添加数据:insert into 表名 values (值1,值2,值3...); 2.对指定字段添加数据:insert into 表名 (字段名1,字段名2...) values (值1,值2..…

跨区域文件管控过程中 如何保障安全和效率?

跨区域文件管控是指在跨越不同地域或区域的情况下对文件进行管理和控制的过程。这种控制可能涉及多个方面,包括安全性、合规性和管理效率等。 为了有效进行跨区域文件管控,组织通常需要采取一系列策略和措施,例如: 1、加密和安全…

旺店通·企业奇门和金蝶云星空接口打通对接实战多系统间数据

旺店通企业奇门和金蝶云星空接口打通对接实战 来源系统:旺店通企业奇门 慧策(原旺店通)是一家技术驱动型智能零售服务商,基于云计算PaaS、SaaS模式,以一体化智能零售解决方案,帮助零售企业数字化智能化升级&#xff0c…

二进制文件(.bin等文件)转C语言数组形式hex文件(.c等文件)

使用python脚本把二进制文件(.bin等文件)转C语言数组形式hex文件(.c等文件),具体代码如下: (1)读取.bin文件数据 (2)生成C语言数组定义 (3&…

深圳雷龙LSYT201B语音控制模组

文章目录 前言一、芯片简介处理器外设音频蓝牙电源封装温度 二、功能简介管脚描述 三、应用场景四、使用说明五、硬件连接六、FAQ总结 前言 今天拿到的语音控制板是LSYT201B模组,它是深圳市雷龙发展有限公司基于YT2228芯片开发的一款面向智能家居控制的离线语音控制…