【Python】2.组合(容器)数据类型


一、集合类型与操作

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'}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值