Python学习笔记 十二 (组合数据类型)
在Python中除了基本数据类型之外还有组合数据类型,组合数据类型在编程中有着很大的作用,下面我对我所学到的组合数据类型进行简单的总结,希望能对你我有益。
目录
- 集合类型的介绍
- 序列类型的介绍
- 字典类型的介绍
一、集合类型的介绍
Python中的集合数据类型和数学中的集合数据类型相同,元素之间无序且每个元素之间唯一不存在相同元素,因此集合元素不可更改以及不允许使用可变数据类型当做元素。
- 集合使用 { } 或 set()创建,元素之间使用,分隔,空集合使用set()创建,不能使用 { } 表示(和字典的创建有关)。
>>> {1,2,3,4}
{1, 2, 3, 4}
>>> set("1234")
{'3', '2', '1', '4'}
>>>
- 集合由于和数学中的集合相同,因此也可以进行交、并、差、补操作。
a | b —— 并
a & b —— 交
a - b —— 差
a ^ b —— 补
a <= b 或 a < b —— 判断子集关系
a >=b 或 a > b —— 判断包含关系
>>> a = {1,2,3,4}
>>> b = {1,2,3,4,5}
>>> b-a
{5}
>>>
-
和数值操作符类似,集合之间也有赋值增强操作符。
a |= b —— a和b执行完并操作后将结果更新给a
a &= b —— a和b执行完交操作后将结果更新给a
a -= b —— a和b执行完减操作后将结果更新给a
a ^= b —— a和b执行完补操作后将结果更新给a -
集合的处理方法
方法名 | 大致作用 |
---|---|
S.add(x) | 如果x不在集合S中,则将x加入到集合S中 |
S.discard(x) | 丢弃x,若集合S中没有x,不报错 |
S.remove(x) | 移除x,若集合S中没有x,发生KeyError异常 |
S.clear() | 移除S中的所有元素 |
S.pop() | 随机取出一个集合S中的值 |
S.copy() | 返回一个集合S的副本 |
len(s) | 返回集合S中的元素个数 |
x in S | 判断x是否在集合S中,返回true 或 flase |
s not in S | 判断x是否不在集合S中,返回true 或 flase |
set(x) | 将其他类型的数据转化为集合类型 |
- 集合类型用于数据去重
由于集合类型要求元素之间唯一确定不能重复,这个性质可以用于数据去重。
>>> a = [1,1,2,2,3,3]
>>> set(a)
{1, 2, 3}
>>>
二、序列类型
1. 序列类型
序列类型是一个基类类型,可以理解为在序列类型的基础上可以扩展为其他数据类型,例如 元组、列表、字符串。
序列是指具有一定先后关系的一组元素,元素之间类型可以不同,元素之间通过序号引导(序号分为正向递增和反向递减),通过序号可以访问特定位置的元素。
- 序列的通用操作
操作符 | 功能 |
---|---|
x in S | 判断x是否在序列S中,返回 true 或 false |
x not in S | 判断x是否不在序列S中,返回 true 或 false |
x + S | 连接两个序列 |
S * n 或 n * S | 将序列赋值 n 次 |
S [ i ] | 索引 S 中第 i 个元素 |
S [i : j : k] | i 不到 j 按步长为 k 切片 |
- 序列的通用函数
函数名 | 功能 |
---|---|
len(S) | 返回序列S的元素个数 |
min(S) | 返回序列S中最小值,需要元素之间可以比较 |
max(S) | 返回序列S中最大值,需要元素之间可以比较 |
S.index(x)或S.index(i, j, k) | 返回序列S中(或 j 到 k 之间)第一次出现 x 的位置 |
S.count(x) | 返回序列S中出现x的总次数 |
2. 序列类型所扩展的数据类型
由于是在序列类型的基础上所扩展的,所以继承序列类型所有性质,并附加其他性质。
- 元组:一种一旦创建就不能修改的序列类型,序列基础上的延伸,使用 () 或tuple()创建,元素之间使用,分隔,由于元组类型一旦创建就不能修改,因此没有特别的操作。
如果想要保护数据,则可以将数据设为元组类型,因为元组类型数据不允许修改。
- 列表:一种创建后可以随意修改的序列类型,使用 [ ] 或 list()创建。
列表使用注意点:由 [ ] 或 list()创建的才是真实的列表,赋值的过程只是将自己的地址给变量,而不是真正的值的传递。
列表类型增加的操作函数以及方法
函数或方法名 | 功能 |
---|---|
lb [ i ] = x | 将列表序号为 i 的元素替换为 x |
lb [i : j : k] = ls | 用列表 ls 替换列表lb切片后的空缺 |
del lb [ i ] | 删除列表序号为 i 的元素 |
del lb[i : j : k] | 删除列表按步长k切片后的元素 |
lb += ls | 将列表 ls 添加到 lb列表(ls列表无变化) |
lb *= n | 将列表 lb 赋值 n次(n为正整数) |
lb.append(x) | 为列表 lb 后面添加元素 x |
lb.clear() | 删除列表所有元素 |
lb.copy() | 返回一个新列表,内容为列表 lb 的副本 |
lb.insert(i, x) | 将列表序第 i 个位置添加元素 x,原位置元素依次往后排 |
lb.pop(i) | 将列表第 i 位置的元素取出,其他元素依次补位 |
lb.remove(x) | 将列表中第一次出现的元素 x 删除 |
lb.reverse() | 反转列表元素 |
>>> a = list("12345678")
>>> b = list("一二三四")
>>> a[0:7:2] = b
>>> a
['一', '2', '二', '4', '三', '6', '四', '8']
>>>
# is += it实例
>>> lb = [1,2,3]
>>> ls = [4,5,6]
>>> lb += ls
>>> lb
[1, 2, 3, 4, 5, 6]
>>> ls
[4, 5, 6]
>>>
# lb *= n 实例
>>> it *= 3
>>> it
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>>
#ls.insert()实例
>>> ls
[4, 5, 6]
>>> ls.insert(0,'元素')
>>> ls
['元素', 4, 5, 6]
>>>
>>> ls
['元素', 4, 5, 6]
>>> ls.pop(0)
'元素'
>>> ls
[4, 5, 6]
>>>
三、字典类型
字典类型是一种键和值映射的关系集,和实体字典类似,字由索引目录中的页码代替,通过页码就能找到字,这样页码和字之间就构成了映射关系。
- 字典通过 { } 或者dict()创建,键值对用:表示,键值对之间无序;可以使用 [ ] 对字典进行索引或者添加元素(可以参考序列类型的操作)。
#索引字典元素
>>> d = {"陕西":"西安","广西":"南宁","浙江":"杭州"}
>>> d["陕西"]
'西安'
#给字典添加元素
>>> d["湖北"] = "武汉"
>>> d.items()
dict_items([('陕西', '西安'), ('广西', '南宁'), ('浙江', '杭州'), ('湖北', '武汉')])
>>>
字典类型操作方法和函数
函数和方法名 | 功能 |
---|---|
del d [ k ] | 删除字典中 k 键所对应的值 |
k in d | 判断k是否在字典中,返回true 或 flase |
d.keys() | 返回字典中所有键的信息 |
d.values() | 返回字典中值的信息 |
d.items() | 返回字典中所有键值对信息 |
d.get(k, 自定义的值) | 查找键 k ,若存在则返回对应的值,相反返回自定义的值 |
d.pop(k, 自定义的值) | 取出键 k 对应的值,若不存在则返回自定义的值 |
d.popitem() | 随机从字典中取出一个键值对,以元组的形式返回 |
d.clear() | 删除字典中所有元素 |
len(d) | 返回字典 d 中元素个数 |
>>> d.keys()
dict_keys(['陕西', '广西', '浙江'])
>>> d.values()
dict_values(['西安', '南宁', '杭州'])
>>>
>>> d.get("四川",1)
1
>>>
>>> d.popitem()
('浙江', '杭州')
>>> d.items()
dict_items([('陕西', '西安'), ('广西', '南宁')])
>>>
待续…