一、集合类型与操作
1.集合定义
(1)集合是多个元素的无序组合,与数学中的集合概念一致,其中每个元素都是唯一的,不存在相同元素。
(2)集合是不可变数据类型:元素放到集合中之后不能被修改,如整数、浮点数、复数、字符串类型、元组等都是不可变数据类型。
(3)用{}表示,用逗号分隔。建立集合用{}或set(),建立空集合,只能用set()。
2.集合的操作
Python中提供了六种集合操作符:
操作符 | 描述 |
---|---|
S |T | 返回一个新的集合,包括在集合S和T的所有元素 |
S - T | 返回一个新集合,包括在集合S但不在T中的元素 |
S & T | 返回一个新集合,包括同时在集合S和T中的元素 |
S ^ T | 返回一个新集合, 包括集合S和T中非相同元素 |
S <= T 或 S < T | 返回True/False, 判断S和T的子集关系 |
S >= T 或 S > T | 返回True/False, 判断S和T的包括关系 |
3.集合操作方法
Python中提供的十个常用集合操作方法:
函数 | 描述 |
---|---|
S.add(x) | 是把要传入的元素x做为一个整个添加到集合中 |
S.clear(x) | 清空集合里面的所有元素 |
S.copy(x) | 复制集合里面的所有元素 ,返回一个浅复制 |
S.discard(x) | 如果在集合中存在元素 x, 则删除,不报错 |
S.pop(x) | 删除并且返回集合中的元素x, 如果不在集合中则引发 KeyError |
S.remove(x) | 从集合中删除元素 , 如果不存在则引发 KeyError |
len(x) | 返回集合元素个数 |
set(x) | 将其他类型变量x转换为集合类型,去重 |
x in S | 判断,返回布尔值 |
x not in S | 判断,返回布尔值 |
集合常用的在数据去重中,使用set()
函数,例如:
>>> ls = ['p','p','y','y']
>>> s = set(ls)
>>> s
{'p', 'y'}
二、序列类型与操作
1.序列定义和操纵
(1)序列是具有先后关系的一组元素,是一维的向量,元素类型可以不同。
(2)序列类型衍生出如字符串类型、元组类型和列表类型,对于序列的操作都是用于上述类型,这几种类型还分别由各自的操作方法。
(3)序列的序号正向递增0 ->,反向递减<- -1。
(4)序列类型的通用操作符:包括索引、切片、相加、相乘、成员资格检查。[图源北理网课Python123]
>>> ls = ['Python','ls','s']
>>> ls[::-1]
['s', 'ls', 'Python']
>>> s = "Python"
>>> s[::-1]
'nohtyP'
①如果函数调用返回一个序列,可直接对其执行索引和切片操作。
>>> Y = input('year:')[2:4]
year:2020
>>> Y
'20'
②如果切片结束于序列末尾,可省略第二个索引;同样的,同样,如果切片始于序列开头,可省略第一个索引。
>>> Numbers = [1,2,3,4,5,6]
>>> Numbers[-3:]
[4, 5, 6]
>>> Numbers[:3]
[1, 2, 3]
③一般而言,不能拼接不同类型的序列。
(5)序列通用操作函数和方法:
函数 | 描述 |
---|---|
len(s) | 返回序列s长度 |
min(s) max(s) | 返回序列中最小元素或最大元素,s中的元素必须是同类型可比较 |
s.index(x,i,j) | 返回序列中从i到j第一次出现x的位置 |
s.count(x) | 返回序列中s出现的总次数 |
2.元组定义和操作
(1)元组是一种序列类型,一旦创建就不能被修改,使用小括号()或者tuple()创建元组,也可以不使用小括号,默认为元组类型。
包含一个值的元组如何创建:只有括号没有逗号创建的就不是元组。
>>> 1
1
>>> 1,
(1,)
(2)元组创建之后,其中的元素不能被修改。
>>> ys = 1,2,3
>>> ys
(1, 2, 3)
>>> ys = ys[::-1]
>>> ys
(3, 2, 1)
>>> ys[1] = 9
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
ys[1] = 9
TypeError: 'tuple' object does not support item assignment
(3)元组常用于元素不改变的场景,或者是一些固定的函数返回,当不希望数据被改变时,可以将其他数据类型转换为元组进行数据保护。
>>> ls = ['Python','ls','s']
>>> lt = tuple(ls)
>>> lt
('Python', 'ls', 's')
(4)列表几乎可以处理一切要用到序列的场合,而对于元组的使用主要有以下两个方面:
①它们用作映射中的键(以及集合的成员),而列表不行。
②有些内置函数和方法返回元组。
3.列表定义
(1)列表与元组不同,创建之后元素可以随意被修改,使用方括号[]或list()创建,无长度限制。实际上list并不是一个简单的函数,而是一个类,后续在类与对象中会学到。
(2)如果不使用[]或list()赋值,仅使用=传递的话,并不是真正创建了一个列表,有点像C++里面的指针,指向同一个内存空间。
>>> ls = ['Python','ls']
>>> lt = ls
>>> lt
['Python', 'ls']
(3)列表的操作函数和方法:
①del语句将元素从列表中删除,同时也改变其长度。
②注意常规复制所代表的关联列表和list.copy的不同:
>>> a = [1, 2, 3]
>>> b = a
>>> b[1] = 4
>>> a
[1, 4, 3]
>>> a = [1, 2, 3]
>>> b = a.copy()
>>> b[1] = 4
>>> a
[1, 2, 3]
③count计算指定元素出现次数。
④对于列表末端增加一个元素用append,对于列表末端增加一堆元素(列表拼接)用extend。方法extend让你能够同时将多个值附加到列表末尾,为此可将这些值组成的序列作为参数提
供给方法extend。换而言之,你可使用一个列表来扩展另一个列表。
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]
鉴于常规拼接必须使用a和b的副本创建一个新列表,因此如果你要获得类似于下面的效果,拼接的效率将比extend低:
>>> a = a + b
⑤排序sort,方法sort用于对列表就地排序。就地排序意味着对原来的列表进行修改,使其元素按顺序排列,而不是返回排序后的列表的副本。sort没有返回值。如果要将x排序后的列表关联到y,而保留x不变,那么应该
>>> x = [4, 6, 2, 1, 7, 9]
>>> y = x.copy()
>>> y.sort()
>>> x
[4, 6, 2, 1, 7, 9]
>>> y
[1, 2, 4, 6, 7, 9]
注意,如果只是x=y,然后y.sort()的话是会改变x的,因为y没有真实创建,只是和x关联了同一个列表。
三、字典类型与操作
1.字典类型定义
(1)字典类型类似于一种映射,是一种键(索引)和值(数据)之间的对应,实际上序列就是以数字0…N作为默认索引。键是数据索引的一种扩展形式 ,字典就是由键值对组成的集合,键值对之间没有顺序。键可能是数、字符串或元组。
(2)使用大括号{}和dict()创建,键值对用:表示,{<键1>:<值1>,<键2>:<值2>,…}。
通过其他映射来创建:
>>> items = [('name', 'Gumby'), ('age', 42)]
>>> d = dict(items)
>>> d
{'age': 42, 'name': 'Gumby'}
>>> item=[['p',1],['y',2]]
>>> d = dict(item)
>>> d
{'p': 1, 'y': 2}
关键字实参创建:
>>> d = dict(name='Gumby', age=42)
>>> d
{'age': 42, 'name': 'Gumby'}
(3)字典中的键可以是任意不可变的类型,如浮点数(实数)、字符串或元组。
2.字典类型的操作
(1)在字典变量中,通过键获得值:
<值>=<字典变量>[<键>]
(2)字典类型操作函数和方法:
函数 | 描述 |
---|---|
d[k]/d[k] = v | 返回值或改变值 |
del d(k) | 删除字典中对于键的数据值 |
k in d | 判断键k是否在字典d中 |
d.keys | 返回字典d中全部的键信息 |
d.values | 返回字典d中全部的数据值信息 |
d.items | 返回字典d中全部的键值对信息 |
d.get(k,< default>) | 若k存在,返回相应的值,不在则返回< default> |
d.pop(k,< default>) | 若k存在,取出相应的值 |
d.popitem() | 随机取出一个键值对,以元组形式返回 |
d.clear() | 删除所有键值对 |
len(d) | 返回字典d中元素的个数 |
①方法fromkeys创建一个新字典,其中包含指定的键,且每个键对应的值都是None。或者直接使用dict中的方法。
>>> {}.fromkeys(['name', 'age'])
{'age': None, 'name': None}
>>> dict.fromkeys(['name', 'age'])
{'age': None, 'name': None}
②注意get和setdefault都可以取得字典中的值,但是当字典中没有键时,情况不一样,setdefault会将设定的default值添加到字典中,
dict.setdefault('y',"None")
'None'
>>> dict
{'p': 1, 'y': 'None'}
>>> dict = {'p':1}
>>> dict.get('y',"None")
'None'
>>> dict
{'p': 1}
>>> dict.get('p',"None")
1
>>> dict.setdefault('p','None')
1
>>> dict.setdefault('y',"None")
'None'
>>> dict
{'p': 1, 'y': 'None'}