这一部分开始,我们将讲解Python中的组合数据类型,这里的知识十分基础而且重要,也已经与C语言的框架愈差愈远。
目录
序列和索引
1、概念
序列是一个用于储存多个值的连续空间,每个值对应着一个整数编号,被称为索引。
索引又被分为正向递增索引:0、1、2、......、n-1 和反向递减索引:-n、-n+1、……、-1
我们可以简单地理解为C语言中的数列,当然它实际的意义十分宽广。以下展示一份代码:
s='helloworld'
for i in range(1, len(s)):
print(i, s[i], end='\t\t')
# 输出结果:1 e 2 l 3 l 4 o 5 w 6 o 7 r 8 l 9 d
s[i]就是使用了索引,这里还新用到了一个len()函数,它可以返回序列的长度。我们以下要提到的列表、元组、字典和集合,事实上都是序列。
2、切片操作
序列的切片操作是根据索引截取部分序列,其语法结构为:
序列[start:end:step]
start:开始索引(包含),默认从0开始
end:结束索引(不包含),默认到结尾(此时包含最后一个元素)
step:步长(默认为1)
例如切片 序列[0:5:2] 就是从第1个元素开始到第6个元素,步长为2地取出了3个元素。
3、序列的其他操作
相加:s1+s2 直接拼接成新序列;
相乘:s*n 将s赋值n遍;
x in s :若x为s的元素,结果为True,否则结果为False;
x not in s:若x不是s的元素,结果为True,否则结果为False;
len(s):序列s中元素的个数
max(s):序列s中元素的最大值 (对字符的值要看ASCII码)
min(s):序列s中元素的最小值
s.index(x):序列s中第一次出现元素x的位置 (返回的是索引)
s.count(x):序列s中出现x的总次数
很显然,Python中有关序列的内置函数提供十分方便的操作方法,这是初学C语言时所没有的。
列表
1、概念
列表是一列按特定顺序排列的元素,属于可变序列。使用 [ ] 定义,元素之间用 “ , ”(逗号) 分隔。
2、创建与删除
列表的创建有两种方法
①:列表名=[element1,element2,...]
②:列表名=list()
列表的删除
del 列表名
3、列表的操作
①:序列的操作均可以对列表使用。
②:enumerate函数
这个函数的作用是索引列表,语法格式为:
for index, item in enumerate(lst):
语句块
其中的index是序号,item是元素,这样做可以同时历边列表的序号及对应的1元素,在语句块中即可进行输出等操作。
③:特有操作
lst.append():在列表的最后增加一个元素
lst.insert(index,x):在列表的第index位置增加元素x
lst.clear():清除列表中的所有元素
lst.pop(index):删除第index位置的元素
lst.remove(x):将出现的第一个元素x删除
lst.reverse(x):将列表中的元素反转
lst.copy():拷贝列表中的所有元素,生成一个新列表
列表的排序操作:
lst.sort(key=None, reverse=False)
参数key为排序规则,reverse为排序方式,默认为升序,True为降序。
也可以使用sorted()函数,这将生成一个新的对象
sorted(iterable, key=None, reverse=False)
参数sorted为排序对象。
4、列表生成式
即创建列表的语法:
①:lst=[expression for item in range]
②:lst=[expression for item in range if condition] 这是带条件的版本
我们用部分简单的代码演示:
lst=[item*item for item in range(1, 11)]
print(lst)
# 这是1到10的平方
lst=[i for i in range(10) if i%2==0]
print(lst)
# 结果为0到10之间的偶数
5、二维列表
实际上就是元素为列表的列表,我们完全可以将C语言中有关二维数组的知识迁移过来。
历边二维列表的格式:
for row in 二维列表: 行
for item in row: 列
pass
下例是用生成式生成4行5列的二维列表
lst=[[j for j in range(5)] for i in range(4)]
元组
1、概念
下面介绍另一种序列类型:元组。
元组属于不可变序列。用 ( ) 定义,元素间用 “ , ” 分隔。
值得指出的是,元组中只有一个元素时,逗号也不能省略。
2、创建与删除
元组的创建有两种方法:
①:元组名=(~, ~, ..., )
②:元组名=tuple()
删除:
del 元组名
3、元组的操作
①:对序列的基本操作都可以在元组上使用。
②:访问与遍历
使用 [ ] 来索引,且支持切片操作,如 [0:3:2]。
4、元组生成式
t=(expression for item in range)
生成的结果是生成器对象。
5、元组和列表的区别
相较于列表来说,元组不可添加、删除、修改元素等。
元组访问处理的速度较快,可以作为字典中的键。
字典
1、概念
序列类型字典的元素,是按根据一个信息查找另一个信息的方式构成了“键值对”,表示索引用的键和对应的值构成的成对关系。
字典是可变数据类型,是无序的。
2、创建与删除
①d={key1:value1, key2:value2,......}
②用内置函数创建
(1)zip(lst1, lst2) 将两个列表一一对应,其中前者为键。代码演示:
lst1=[1,2,3,4]
lst2=['a','b','c','d']
zipobj=zip(lst1,lst2)
print(zipobj)
(2) d=dict(key1=value1, .......)
d=dict(cat=10,dog=20)
print(d)
# 输出结果:{'cat': 10, 'dog': 20}
这是直接传参进行创建的方法,参数中等号之前的元素是键。
如果两个元素的key相同,value会被覆盖为位置靠后的一方。
元组也可以作为键,可变数据类型不可以作为键。
③删除 del 简单来说,都是用del进行删除。
3、取值与遍历
取出字典中某一项的value:d[key] 或者 d.get(key)
字典的遍历既可以遍历每一对对应关系,也可以同时遍历键和值:
①:for element in d.items():
pass
②:for key, value in d.items():
pass
d={'a': 1, 'b': 2, 'c': 3}
for item in d.items():
print(item)
#结果为:
#('a', 1)
#('b', 2)
#('c', 3)
for key, value in d.items():
print(key, value)
#结果为:
#a 1
#b 2
#c 3
4、相关操作
d.keys() 获取所有的key;
d.values() 获取所有的value;
d.pop(key, default) 如果key存在就获取value,并删除key-value对,否则获取默认值;
d.popitem() 随机获取一个key-value对,结果为元组类型,并且删除该key-value对;
d.clear() 清空字典中所有的key-value对。
5、字典生成式
d={key:value for item in range}
d={key:value for key, value in zip(lst1, lst2)}
集合
1、概念
实际上这里的序列类型集合的概念,与数学中的集合的概念是一致的。集合是无序、不重复的元素序列。
集合中只能储存不可变数据类型(比如整数,但列表不行)
集合使用 { } 定义;集合是可变数据类型。
2、创建
一定要使用set()函数创建集合,直接用{}创建得到的是字典。
s=set('helloworld')
print(s)
# 结果为:{'w', 'e', 'l', 'h', 'o', 'r', 'd'}
3、集合的操作
①:操作符
交 &、并 |、差 -、 补 ^。概念与数学中的定义相同,下面是一段代码演示:
A={10,20,30,40,50}
B={10,20,40,80}
print(A&B)
print(A|B)
print(A-B)
print(A^B)
②:
s.add(x):若x不在s中,则将x添加到集合s。
s.remove(x):x在集合中,将其删除;不在,则报错。
s.clear():清楚集合中所有元素。
4、集合生成式
其实生成式的格式真没有什么差别,下面是两种写法:
s={i for i in range(1,10)}
s={i for i in range(1,10) if i%2==1}
讲解完了这几种类型,我们可以做个简单的总结:
数据类型 | 序列类型 | 元素是否可重复 | 是否有序 | 定义符号 |
列表list | 可变序列 | 可重复 | 有序 | [] |
元组tuple | 不可变序列 | 可重复 | 有序 | () |
字典dict | 可变序列 | Key不可重复 Value可重复 | 无序 | {key:value} |
集合set | 可变序列 | 不可重复 | 无序 | {} |
Python 3.11 新特性
1、结构模式匹配
针对数据结构进行match匹配
语法结构:
match data:
case {}:
pass
case []:
pass
case ():
pass
case_:
pass
2、字典合并运算符
字典合并运算符 “|”
用 | 符号可以直接将两个字典合并起来。ep: merged_dict=d1|d2
3、同步迭代
可以在match匹配中同时迭代两个数据。
match data1, data2:
case data1,data2:
pass
它常与zip函数一同使用。