数据容器

  • 每一个元素,可以是任意类型的数据,如字符串、数字、布尔等

  • 根据特点的不同可分为 5 类:列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)

二、列表(list)

# 定义列表
变量名称 = [元素1, 元素2, 元素3, 元素4, 元素5]
定义空列表
变量名称 = []
变量名称 = list()
使用举例
my_list_1 = ["一木", 20, True, ["onewood", 20]]
my_list_2 = ["一木", 20, True]
print(my_list_2)
print(type(my_list_1))
输出
['一木', 20, True]
<class 'list'>
  • 以中括号 [] 作为标识

  • 列表内每一个元素之间用逗号隔开

  • 列表可以一次存储多个数据,且可以为不同的数据类型,支持嵌套

(2.2)支持反向索引
my_list = ["李白", "章北海", "杜甫"]
print(my_list[-1])  # 打印 杜甫
print(my_list[-2])  # 打印 章北海
print(my_list[-3])  # 打印 李白
(3)列表的常用操作

列表提供了一系列方法:如果将函数定义为 class(类)的成员,那么函数称之为:方法

(4.3)for 与 while 对比

在循环控制上:

while 循环可以自定循环条件,并自行控制

for 循环不可以自定循环条件,只可以一个个从容器内取出数据

在无限循环上:

while 循环可以通过条件控制做到无限循环

for 循环理论上不可以,因为被遍历的容器容量不是无限的

在使用场景上:

while 循环适用于任何想要循环的场景

for 循环适用于遍历数据容器的场景或简单的固定次数循环场景

(5)列表小结
  • 列表特点:

    • 可以容纳多个元素(上限为 2**63-1、9223372036854775807 个)

    • 可以容纳不同类型的元素(混装)

    • 数据是有序存储的(有下标序号)

    • 允许重复数据存在

    • 可以修改(增加或删除元素等)

三、元组(tuple)

元组同列表一样,但一旦定义完成,就不可修改

# 定义元组
变量名称 = (元素1, 元素2, 元素3, 元素4, 元素5)
# 定义只有一个元素的元组
变量名称 = (元素1,)
# 定义空元组
变量名称 = ()
变量名称 = tuple()
my_tuple_1 = ("一木", 20, True, ("onewood", 20))
my_tuple_2 = ("一木", 20, True)
print(my_tuple_2)
print(type(my_tuple_1))
# 输出
# ('一木', 20, True)
# <class 'tuple'>
# 元组只有一个数据时,这个数据要加逗号,否则元组定义不成立
my_tuple = ("一木")
print(type(my_tuple))  # 打印 <class 'str'>
my_tuple = ("一木",)
print(type(my_tuple))  # 打印 <class 'tuple'>
  • 可以修改元组内的 list 的内容(修改元素、增加、删除、反转等)

my_tuple = (1, True, [2, 3, 4])
my_tuple[2][0] = 5
print(my_tuple)  # 打印 (1, True, [5, 3, 4])
  • 不可以替换 list 为其它 list 或其它类型

my_tuple = (1, True, [2, 3, 4])
my_tuple[2] = [1, 2, 3]  # 报错
(3)元组小结
  • 可以与列表一样使用 for 与 while 循环遍历

  • 多数特性和 list 一致,不同点在于不可修改的特性

  • 可以容纳多个数据

  • 可以容纳不同类型的数据(混装)

  • 数据是有序存储的(下标索引)

  • 允许重复数据存在

  • 不可以修改(增加或删除元素等)

四、字符串(str)

字符串是字符的容器,一个字符串可以存放任意数量的字符。

(2.2)替换元素

将字符串内的全部:字符串 1,替换为字符串 2

  • 语法:字符串.replace(字符串 1,字符串 2)

name = "onewood"
new_name = name.replace("onew", "study")
print(name)  # 打印 onewood
print(new_name)  # 打印 studyood
(2.3)分割元素

按照指定的分隔符字符串,将字符串划分为多个字符串,并存入列表对象中

  • 语法:字符串.split(分隔符字符串)

name = "onewood,study,20"
new_list = name.split(",")
print(name)  # 打印 onewood,study,20
print(new_list)  # 打印 ['onewood', 'study', '20']
print(type(new_list))  # 打印 <class 'list'>
# 字符串按照给定的 , 进行了分割,变成多个子字符串,并存入一个列表对象中
(3)字符串小结

同列表、元组一样,字符串也支持 while 循环和 for 循环进行遍历

特点:

只可以存储字符串

长度任意(取决于内存大小)

支持下标索引

允许重复字符串存在

不可以修改(增加或删除元素等)

基本和列表、元组相同

不同于列表和元组的在于:字符串容器可以容纳的类型是单一的,只能是字符串类型。

不同于列表,相同于元组的在于:字符串不可修改


五、数据容器(序列)的切片

序列:内容连续、有序,可使用下标索引的一类数据容器

切片:从一个序列中,取出一个子序列

  • 序列的典型特征就是:有序并可用下标索引,字符串、元组、列表均满足这个要求

  • 序列支持切片,即:列表、元组、字符串,均支持进行切片操作

(2)基本用法

用法

  • 起始下标可以省略,省略从头开始

  • 结束下标可以省略,省略到尾结束

  • 步长可以省略,省略步长为 1(可以为负数,表示倒序执行)

  • 注:

    • 这个操作对列表、元组、字符串是通用的

    • 此操作不会影响序列本身,而是会得到一个新的序列(列表、元组、字符串)

    • 起始位置、结束位置、步长(正反序)都是可以自行控制的

六、集合(set)

不支持元素的重复(自带去重功能)、并且内容无序

  • 以大括号 {} 作为标识

  • 集合内每一个元素之间用逗号隔开

(2)集合的遍历

集合不支持下标索引,所以也就不支持使用 while。

my_set = {"一木", True, "一木"}
for i in my_set:
    print(i)
# 打印
# True
# 一木

(4)集合小结
  • 特点:

    • 可以容纳多个数据

    • 可以容纳不同类型的数据(混装)

    • 数据是无序存储的(不支持下标索引)

    • 不允许重复数据存在

    • 可以修改(增加或删除元素等)

七、字典、映射(dict)

# 定义字典
变量名称 = {key:value, key:value, key:value}
# 定义空字典
变量名称 = {}
变量名称 = dict()
  • 使用 {} 存储原始,每一个元素是一个键值对

  • 每一个键值对包含 Key 和 Value(用冒号分隔)

  • 键值对之间使用逗号分隔

  • Key 和 Value 可以是任意类型的数据(Key 不可为字典)

  • Key 不可重复,重复会对原有数据覆盖

my_dict = {"一木": 99, "李白": 120, "一木": 110}
print(my_dict)  # 打印 {'一木': 110, '李白': 120}
print(type(my_dict))  # 打印 <class 'dict'>
# 获取数据
my_dict = {"李白": 120, "一木": 110}
print(my_dict["李白"])  # 打印 120
(2)数据的获取
  • 字典同集合一样,不可以使用下标索引取值

  • 字典可以通过 Key 值来取得对应的 Value

如上,如下

# 新增元素
my_dict = {"李白": 120, "一木": 110}
my_dict["罗辑"] = 115
print(my_dict)  # 打印 {'李白': 120, '一木': 110, '罗辑': 115}
# 更新元素
my_dict = {"李白": 120, "一木": 110}
my_dict["李白"] = 115
print(my_dict)  # 打印 {'李白': 115, '一木': 110}
# 删除元素
my_dict = {"李白": 120, "一木": 110}
name = my_dict.pop("李白")
print(name)  # 打印 120
print(my_dict)  # 打印 {'一木': 110}
# 清空字典
my_dict = {"李白": 120, "一木": 110}
my_dict.clear()
print(my_dict)  # 打印 {}
# 获取全部的 Key
my_dict = {"李白": 120, "一木": 110}
my_keys = my_dict.keys()
print(my_keys)  # 打印 dict_keys(['李白', '一木'])
# 计算字典内键值对数量
my_dict = {"李白": 120, "一木": 110}
print(len(my_dict))  # 打印 2
(4)字典小结
  • 特点:

    • 可以容纳多个数据

    • 可以容纳不同类型的数据

    • 每一份数据是 Key-Value 键值对

    • 可以通过 Key 获取到 Value,Key 不可重复(重复会覆盖)

    • 不支持下标索引

    • 可以修改(增加或删除更新元素等)

八、数据容器对比总结

(1)简单分类
  • 是否支持下标索引

    • 支持:列表、元组、字符串——序列类型

    • 不支持:集合、字典——非序列类型

  • 是否支持重复元素:

    • 支持:列表、元组、字符串——序列类型

    • 不支持:集合、字典——非序列类型

  • 是否可以修改

    • 支持:列表、集合、字典

    • 不支持:元组、字符串

(4)通用操作——遍历(遍历,统计,排序,转换)
  • 5 类数据容器都支持 for 循环遍历

  • 列表、元组、字符串支持 while 循环,集合、字典不支持(无法下标索引)

(6)通用操作——排序
  • 将给定容器进行排序,排序后都会得到列表(list)对象。

  • 语法:sorted(容器,[reverse=True])

my_list = [1, 4, 2]
my_list_asc = sorted(my_list)
print(my_list_asc)  # 结果 [1, 2, 4]
my_list_des = sorted(my_list, reverse=True)
print(my_list_des)  # 结果 [4, 2, 1]

案例:学生管理系统

假设需要管理学生的基本信息、课程列表和各科成绩:

  • 学号:一旦分配不可更改 → 使用 Tuple 存储:student_id = (2023001, "张三")
  • 课程列表:可能动态增减(如新增选修课) → 使用 List 存储:courses = ["数学", "物理", "化学"]
  • 成绩记录:需通过科目名称快速查询分数 → 使用 Dict 存储:scores = {"数学": 90, "物理": 85}
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐