Python之旅5 - Python数据结构合辑
数据结构:数据结构就是存放数据的结构,简单来说就是我们存放数据的时候使用什么数据类型,
如一个人的姓名使用字符串类型保存,年龄使用数值类型保存,存放一个人的多个信息会使用字典来保存
关于数据结构可以分为两种:线性数据结构 和 非线性数据结构
线性数据结构:线性数据结构中的元素都是一一对应的关系,在python中,字符串str、列表list、元组tuple都是线性数据结构
非线性数据结构:数据结构中的元素可能是一对多的关系,在python中,字典dict、集合set都是非线性数据结构
1、字符串 str
字符串是python中最为常用的一种数据类型,一个字符串可以理解为若干个字符组成的序列结构,他可以使用序列的所有相关操作
1.1、 字符串的拼接,直接使用 + 即可
1 str_a = "Rememberance is a from of meeting."
2 str_b = "Frgetfulnes is a from of freedom"
3 str_join = str_a + str_b
4 print(str_join)
注意事项:
a、字符串的连接,特别是大规模字符串的处理,应该尽量优先使用join而不是+
b、不同类型不能直接通过+运算符进行拼接,需要转换格式
1.2、. 计算字符串长度 len(str)
1.3、 截取字符串(切片)
语法格式:string[start:end:step]
参数说明:
string: 要截取的字符串
start: 要截取的第一个字符的索引,如果不指定默认为0
end: 要截取的最后一个字符的索引,如果不指定则默认字符串长度
step: 表示切片的步长
示例:
1 title = '人生苦短,我学Python'
2 str_1 = title[0]
3 str_2 = title[2:5]
4 str_3 = title[1:9:2]
5 print(str_1)
6 print(str_2)
7 print(str_3)
执行结果:
人
苦短,
生短我P
进程已结束,退出代码0
1.4、分割字符串 split()
语法格式:string.split(sep, maxsplit)
参数说明:
sep: 用于指定分隔符,可以包含多个字符,默认为None,即所有空字符串(包括空格,换行,'\n',制表符,'\t'等)
maxsplit: 可选参数,用于指定分割的次数,如果不指定或者为-1,则分割次数没有限制,否则返回结果列表的元素个数最多为maxsplit+1次
返回值: 分隔后的字符串列表
示例:
1 title = "人生如戏,戏如人生" 2 str_1 = title.split(',') 3 print(str_1) 4 str_2 = title.split(' ', 5) 5 print(str_2)
执行结果:
['人生如戏', '戏如人生'] ['人生如戏,戏如人生'] 进程已结束,退出代码0
1.5、检索字符串
1.5.1、count()方法: 用于检索指定字符串在另一个字符串中出现的次数
语法格式:string.count(sub[,start[,end]])
参数说明:
string:表示原字符串
sub: 表示要检索的字符串
start: 可选参数,表示检索范围的起始位置的索引,如不指定,则默认从头开始
end: 可选参数,表示检索范围的结束位置的索引,如不指定,则默认检索到结尾
1.5.2、 find()方法: 用于检索是否包含指定的字符串.如检索的字符串不存在则返回-1,否则返回首次出现该字符串时的索引
语法格式:string.find(sub[,start[,end]])
参数说明:
string:表示原字符串
sub: 表示要检索的字符串
start: 可选参数,表示检索范围的起始位置的索引,如不指定,则默认从头开始
end: 可选参数,表示检索范围的结束位置的索引,如不指定,则默认检索到结尾
1.5.3、 index()方法: 用于检索是否包含指定的字符串.当不存在时会抛出异常.
语法格式:string.find(sub[,start[,end]])
参数说明:
string:表示原字符串
sub: 表示要检索的字符串
start: 可选参数,表示检索范围的起始位置的索引,如不指定,则默认从头开始
end: 可选参数,表示检索范围的结束位置的索引,如不指定,则默认检索到结尾
1.5.4、 startwith()方法:用于检索字符串是否以指定字符串开头,如果是则返回True,否则返回False
语法格式:string.startwith(suffix[,start[,end]])
string:表示原字符串
suffix: 表示要检索的子字符串
start: 可选参数,表示检索范围的起始位置的索引,如不指定,则默认从头开始
end: 可选参数,表示检索范围的结束位置的索引,如不指定,则默认检索到结尾
1.5.5、 endwith()方法:用于检索字符串是否以指定字符串结束,如果是则返回True,否则返回False
语法格式:string.endwith(suffix[,start[,end]])
string:表示原字符串
suffix: 表示要检索的子字符串
start: 可选参数,表示检索范围的起始位置的索引,如不指定,则默认从头开始
end: 可选参数,表示检索范围的结束位置的索引,如不指定,则默认检索到结尾
字符串函数扩展:
判断类型的有:
string.isspace() 判断是否只包含空格
string.isalnum() 如果string至少有一个字符并且所有字符都是字母或数字,则返回True
string.isalpha() 如果string至少有一个字符并且所有字符都是字母,则返回True
string.isdecimal() 如果string只包含数字则返回True,全角数字
string.isdigit() 如果string只包含数字则返回True,全角数字、(1)、\u00b2
string.isnumeric() 如果string只包含数字则返回True,全角数字,汉子数字
string.istitle() 如果string是标题化的(每个单子的首字母大写),则返回True
string.islower() 如果string中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回True
string.isupper() 如果string中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回True
查找和替换:
string.startswith(strs))检查字符串是否以str开头,是则返回True
string.endswith(strs))检查字符串是否以str结尾,是则返回True
string.find(strs, 0, len(string))string如果start和end指定范围,则检查是否包含在指定范围,如果是返回索引值,否则返回-1
string.rfind(strs, 0, len(string))类似于find()函数,只不过是从右边开始查找
string.index(strs, 0, len(string))类似于find()函数,只不过如果str不存在string会报错
string.rfind(strs, 0, len(string))类似于index(),只不过从右边开始
string.replace(old_str, new_str, 1)把string中的old_str替换成new_str,如果num指定,则替换不超过num次
大小写转换
string.capitalize()把字符串的第一个字符大写
string.title()把字符串中的每个单词首字母大写
string.lower()把字符串中大写字符转为小写
string.upper()把字符串中小写字符转为大写
string.lower().title().swapcase()翻转字符串中的大小写
文本对齐
string.ljust(3n) 返回一个字符串左对齐,并使用空格填充至长度n的新字符串
string.rjust(3n) 返回一个字符串右对齐,并使用空格填充至长度n的新字符串
string.center(3n) 返回一个字符串居中对齐,并使用空格填充至长度n的新字符串
去空白字符串
string.lstrip() 截掉string左边(开始)的空白字符
string.rstrip() 截掉string右边(开始)的空白字符
string.strip() 截掉string两边的空白字符
拆分和对齐
string.partition(strs) 把字符串string分成3个元素的元组(strs前,strs,strs后)
string.rpartition(strs) 类似于partition,从右边开始查找
string.split(strs, 10) 以strs为分隔符切片string,如果num有指定值则分割num+1个子字符串(此处num=10),strs默认包括\r, \n ,\t和空格
2、列表 list
列表是python中常见的一种序列类型,列表除了可以保存多个数据内容之外,也可以动态实现对列表数据的修改
2.1列表的创建(定义)
列表的几种创建方式:
a、使用赋值运算符=直接创建列表
语法格式:list_name=[element1,element2,element3,....]
b、创建空列表
语法格式:list_name=[]
c、使用list()函数创建数值列表
语法格式:list_name=list(data)
参数说明:
data表示可以转换为列表的数据,其类型可以是字符串,元组或其他可迭代类型的数据
2.2 列表的删除
语法格式:del list_name
2.3 访问列表元素
可以通过索引来访问,也可以通过遍历实现查询、处理等操作
示例:遍历列表
1 list_exc = ['str', 'list', 'tupel', 'dict', 'set']
2 for i in list_exc:
3 print(i, end=" | ")
4
5 print()
6
7 for index, item in enumerate(list_exc):
8 print("list_exc的索引为%d对应的值%s" % (index, item))
2.4、对列表的操作相关函数
list_name.append(obj) 在列表的最后追加新元素obj
list_name.insert(index,obj) 在列表的指定index索引位置添加新元素obj
list_name.extend(list) 将列表list追加到列表list_name中(为一个列表追加另一个列表)
list_name.remove(obj) 从列表中删除数据obj
list_name.pop(index) 从列表中弹出一个数据并删除,当index为空时,默认弹出最后一个
del list_name[index] 从列表中删除索引为index的元素
list_name.clear() 清空列表内所有数据
del list_name 删除整个列表
list_name.index(obj) 从列表中查询obj元素第一次出现的索引位置
3、元组 tuple
元组tuple是与列表类似的线性数据结构,与列表结构所不同的是,元组中定义的元素内容是不可以被更改的。
元组的创建和删除:
创建空元组 如:tuple_empt=()
当元组只有一个元素内容时,元素后一定需要加一个逗号,如tuple_one('element1',)
多个元素内容
tuple_more('element1','element2',...)
删除元组 del tuple_name
序列的统计函数
len(seq) 获取序列的长度
max(seq) 获取序列中的最大值
min(seq) 获取序列中的最小值
sum(seq) 获取序列中的内容总和
any(seq) 序列中有一个内容为True,结果为True,全部为False时,结果为False
all(seq) 序列中有一个内容为Flase,结果为Flase,全部为True是,结果为True
关于list对象方法sort()和Python内置方法sorted()方法的区别
sort()是在原表上直接进行排序,会改变原列表排序
sorted()会建立一个原表的副本,该副本为排序后的列表
4、字典 dict
字典的特性
① 通过键而不是通过索引来读取;
②字典是任意对象的无序集合;
③字典是可以改变的,并且可以任意嵌套;
④字典中的键必须唯一,如果出现两次,则最后一个值会被记住;
⑤字典中的键是不可以变得,可以是数字、字符串、元组,不可以是列表;
⑥以键值对的形式出现,键必须存在,值可以为None
字典的定义:①使用{}来定义
②使用dict()函数定义
字典的两种迭代输出方式:
示例:
1 info = dict(name="xiaoming", age=18, height="180cm")
2 for key in info:
3 print("%s : %s" % (key, info[key]))
4
5 print("*" * 20)
6
7 for key, value in info.items():
8 print("%s : %s" % (key, value))
执行结果:
name : xiaoming
age : 18
height : 180cm
********************
name : xiaoming
age : 18
height : 180cm
进程已结束,退出代码0
字典的操作函数
dict_name.clear() 清空字典数据
dict_name.update(key=value,...) 更新字典数据
dict.fromkeys(sqe[,value]) 创建字典,使用序列中的数据作为key,所有key拥有相同的value
dict_name.get(key[,defaultvalue]) 根据key获取对应的值
dict_name.pop(key) 弹出字典中指定的key数据
dict_name.popitem() 从字典中弹出一对键值对
dict_name.keys() 获取字典中全部的key
dict_name.values() 获取字典中的全部数据
5、集合set
集合是一个无序的,不重复的数据组合,它的主要作用如下:
① 去重复,把一个列表变成集合,就自动去重了
② 关系测试,测试两组数据之前的交集、差集、并集等关系
5.1、定义集合
① 使用{}创建 如set_name = {'hello' , 'world'}
②使用set()函数创建 如set_name = set()
5.2、集合的常用函数
set_name.add(element1,...) 向集合中追加数据
set_name.clear() 清空集合数据
set_name.discard(element) 如果元素存在则删除元素
set_name.update(element) 更新集合数据
set_name.remove(element) 从集合中删除数据
set_name.pop() 从集合中弹出一个元素
集合的比较运算
set_a.difference(set_b) 计算两个集合的差集,等价于 set_a - set_b
set_a.intersection(set_b) 计算两个集合的交集,等价于 set_a & set_b
set_a.union(set_b) 计算两个集合的并集,等价于 set_a | set_b
set_a.symmetric_difference(set_b) 计算两个集合的对称差集,等价于 set_a ^ set_b
列表、元组、字典、和集合的区别
列表是可变、可重复、有序的数据结构;
元组是不可变、可重复、有序的数据结构;
字典是可变、可重复、无序的数据结构;
集合是可变、不可重复、无序的数据结构
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下