Python 的数据结构有哪些?
Python 有四种数据结构,分别是列表、元组、字典、集合,每种数据结构都有其适合的应用场景,下面将分别描述各种数据结构的特点。
列表
定义:列表是一个有序的、可修改的、可重复的、元素以逗号分隔开的、以中括号包围的序列,可通过 [] 和 list() 定义。
创建:num_list = [1, 2, 3],str = list(),str 其实是一个空列表,相当于 str = [] 。
特点:列表内的数据是可变的,可嵌套的(甚至可以嵌入其他数据结构)。
使用场景:列表的使用场景非常广泛,因为是一个可重复的、可修改的有序序列,因此列表可以满足大部分的日常使用场景。
常用操作:
num_list = [1, 2, 3]
# 新增
num_list.append(4)
# 删除
num_list.pop() # 删除指定索引上的元素并返回,索引默认为-1
num_list.remove() # 从左到右删除指定索引上的元素并返回
# 修改
num_list.insert() # 在指定索引位置插入指定的元素
# 查询
num_list.index() # 从左到右返回指定元素的索引
元组
定义:元组是一个有序的、不可修改的、可重复的、元素以逗号分隔开的、以小括号包围的序列,可通过 () 和 tuple() 定义
创建:tuple01 = tuple(), tuple02 = (), 创建一个单元素元组,需要特别注意小括号内的逗号,如果小括号内没有逗号,python不会给变量创建一个tuple,而是常见一个常量
>>>tuple01 = (1)
>>>tuple01
1
>>>print(type(tuple01))
>>>tuple02 = (1,)
>>>tuple02
(1,)
>>>print(type(tuple02))
>>>tuple03 = ('a')
>>>tuple03
'a'
>>>print(type(tuple01))
特点:元组中的数据是被“写保护”的,是不可变的,但这个不可变只是针对元组,如果元素本身可变,即使在元组中,元素依然是可变的。
使用场景:由于元组的不可更改性,所以元组中的数据被“写保护”,可以联想到场景应用,软件中比较重要的数据可以用元组存储
常用操作:由于元组的特点,因此元组没有新增、修改、删除的操作
tuple01 = (1, 'a', 2, 'b', 2)
# 查询
tuple01.index() # 从左到右返回指定元素的索引
# 计数
tuple01.count() # 返回指定元素的个数
字典
定义:字典是一个无序的、可修改的、元素呈键值对形式的、以逗号分隔、以大括号包围的序列
创建:dict01 = {}, dict02 = {"a": 1, "b": 2}
特点:字典是 python 的基础数据中唯一一个有映射关系的数据类型;因为字典是无序的,所以字典没有索引;因为字典没有索引,所以字典以键取值;因为字典以键取值,所以字典的键唯一且不可更改,因为字典的键不可更改,所以列表和字典等可变类型的数据不可以作为字典的键
使用场景:任何需要使用键值对形式的数据,都可以使用字典存储
常用操作:字典可以修改、删除、查询以及判断
# 修改
info[‘name’]=‘garden’ # 通过键名进行修改,如果键不存在,则创建键,并赋值
# 删除
del info[‘name’] # 删除指定的键和值
info.clear() # 清空字典
# 查询
info[‘name’] # 通过键名查找
info.keys() # 返回一个包含字典所有键的列表
info.values() # 返回一个包含字典所有值的列表
info.items() # 返回字典键值的列表,且呈元组的形式
info.setdefault(‘name’, ‘Garden’) # 设置默认,如果键存在,则返回值;如果不存在,则创建键,值默认为 None,值也可以指定
# 判断
"a" in dict01 # 判断dict01是否存在key-“a”,有则返回True,否则返回False
dict01.__contains__("b") # 判断dict01是否存在key-“b”,有则返回True,否则返回False
集合
定义:集合是一个无序的、不重复的、以大括号包围的元素集合
创建:set01 = {1, 2},set02 = set(),空集合只能用set()创建,不能用{},因为这会创建空字典
特点:集合的元素是不能重复的,元素是唯一的,和字典的key类似
使用场景:根据集合的特点,对数据去重或者交集、并集操作,集合会更适合
常用操作:
# 交集
set01 & set02 # 交集,两个集合公共部分
# 并集
set01 | set02 # 并集,两个集合合并
# 差集
set01 - set02 # 差集,只有前项有,不存在后项的元素
# 对称差集
set01 ^ set02 # 对称差集,只存在 a 或 b 中的元素
# 添加
add # 为集合无规律添加元素
update # 添加元素,且可以不同类型,并用逗号分开
# 删除
remove # 删除指定的元素,当指定元素不存在时会报错
discard # 删除指定的元素,当指定元素不存在时不会报错
pop # 随机删除一个元素