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

 

列表、元组、字典、和集合的区别
列表是可变、可重复、有序的数据结构;
元组是不可变、可重复、有序的数据结构;
字典是可变、可重复、无序的数据结构;
集合是可变、不可重复、无序的数据结构

posted @   陈亦洺  阅读(78)  评论(0编辑  收藏  举报
编辑推荐:
· 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代理 了,记录一下
点击右上角即可分享
微信分享提示