python基础学习笔记第五章——容器

一、数据容器入门

1. 定义

一种可容纳多份数据的Python数据类型,每份数据为元素,元素可以是任意类型(字符串、数字、布尔等)。

2. 分类(按特性划分)

依据是否支持重复元素、是否可修改、是否有序分为5类:

list(列表)tuple(元组)str(字符串)set(集合)dict(字典)

3. 核心优势

替代多个独立变量,实现批量存储/使用数据,简洁高效。

二、列表(list)- 可修改、有序、可重复

1. 定义

cpp 复制代码
# 普通定义
name_list = ['itheima', 'itcast', 'python']
# 多类型+嵌套
my_list = ['itheima', 666, True, [1,2,3]]
# 空列表
empty_list = []
empty_list2 = list()

2. 下标索引

  • 正向:从0开始递增

  • 反向:从-1开始递减

  • 嵌套列表:多层下标访问

cpp 复制代码
my_list = [[1,2,3], [4,5,6]]
print(my_list[0])       # 取内层第一个列表:[1,2,3]
print(my_list[0][0])    # 取内层第一个列表的第一个元素:1

3. 常用方法

方法 作用 代码示例
append(元素) 尾部追加元素 my_list.append(7)
extend(容器) 尾部追加另一个容器的所有元素 my_list.extend([8,9])
insert(下标, 元素) 指定下标插入元素 my_list.insert(1, 'test')
del 列表[下标] 删除指定下标元素 del my_list[0]
pop(下标) 删除指定下标元素并返回该元素 val = my_list.pop(0)
remove(元素) 删除第一个匹配的元素 my_list.remove(666)
clear() 清空列表 my_list.clear()
count(元素) 统计元素出现次数 num = my_list.count(1)
index(元素) 查找元素下标,找不到报错 idx = my_list.index('itheima')
len(列表) 统计元素个数 l = len(my_list)

4. 遍历

while循环

cpp 复制代码
my_list = [1,2,3,4,5]
index = 0
while index < len(my_list):
    print(my_list[index])
    index += 1

for循环

cpp 复制代码
my_list = [1,2,3,4,5]
for i in my_list:
    print(i)

5. 特点

  • 可容纳多个元素(上限

  • 支持多类型元素、嵌套

  • 有序(有下标)、可重复

  • 可修改(增/删/改元素)

三、元组(tuple)- 不可修改、有序、可重复

1. 定义

注意:单个元素必须加逗号,否则不是元组类型

cpp 复制代码
# 普通定义
t1 = (1, "Hello", True)
# 单个元素
t2 = ("Hello",)
# 嵌套元组
t3 = ((1,2,3), (4,5,6))
# 空元组
t4 = ()
t5 = tuple()

2. 常用方法(仅查询/统计,无修改方法)

cpp 复制代码
t = (1,2,'hello',3,4,'hello')
print(t.index('hello'))  # 查找下标:2
print(t.count('hello'))  # 统计次数:2
print(len(t))            # 统计个数:6
print(t[2])              # 下标取值:'hello'

3. 特殊修改规则

元组本身不可修改,但内部的列表可以修改(不可替换列表)

cpp 复制代码
t = (1,2,['itheima','itcast'])
t[2][1] = 'best'  # 合法:修改列表内元素,结果:(1,2,['itheima','best'])
# t[2] = [1,2,3]  # 非法:替换列表,报错

4. 遍历

同列表(while/for循环均可)

cpp 复制代码
t = (1,2,3,4,5)
# for循环(推荐)
for i in t:
    print(i)

5. 特点

  • 与列表几乎一致,唯一区别:不可修改

  • 支持多类型、嵌套、有序、可重复

  • 适合存储不希望被篡改的数据

四、字符串(str)- 不可修改、有序、字符专属容器

1. 本质

字符的有序容器,每个字符对应下标,仅能存储字符串类型

2. 下标索引

同列表/元组(正向0开始,反向-1开始)

cpp 复制代码
s = 'itheima'
print(s[0])   # 'i'
print(s[-1])  # 'a'

3. 常用方法

方法 作用 代码示例
index(子串) 查找子串下标,找不到报错 s.index('the')
replace(子串1, 子串2) 替换所有子串1为子串2,返回新字符串 new_s = s.replace('i', 'I')
split(分隔符) 按分隔符分割,返回列表 lst = s.split('e')
strip() 去除首尾空格/换行符 new_s = s.strip()
strip(字符) 去除首尾指定字符(按单个字符匹配) new_s = '12itheima21'.strip('12')
count(子串) 统计子串出现次数 num = s.count('i')
len(字符串) 统计字符个数(中文/数字/符号均算1个) l = len(s)

4. 遍历

同列表/元组(while/for循环均可)

cpp 复制代码
s = '黑马程序员'
for c in s:
    print(c)

5. 特点

  • 专属字符存储,仅支持字符串类型

  • 有序、可重复、不可修改

  • 长度无限制(取决于内存)

五、序列切片 - 列表/元组/字符串通用

1. 序列定义

内容连续、有序、支持下标索引的容器:列表、元组、字符串

2. 切片语法

cpp 复制代码
序列[起始下标:结束下标:步长]
  • 起始下标:留空=从头开始

  • 结束下标:留空=截取到结尾(不含结束下标本身

  • 步长:1=逐个取,N=跳过N-1个,负数=倒序取

3. 示例

cpp 复制代码
# 列表切片
lst = [1,2,3,4,5]
print(lst[1:4])    # [2,3,4](1到3,步长1)
print(lst[::2])    # [1,3,5](从头到尾,步长2)
print(lst[3:1:-1]) # [4,3](倒序,3到2)

# 字符串切片(倒序常用)
s = '12345'
print(s[::-1])     # '54321'(完全倒序)

# 元组切片
t = (1,2,3,4,5)
print(t[:1:-2])    # (5,3)(倒序,尾到2,步长2)

六、集合(set)- 可修改、无序、不可重复(自动去重)

1. 定义

注意 :空集合必须用set(){}是空字典

cpp 复制代码
# 普通定义(自动去重)
s = {'黑马程序员', '传智播客', '黑马程序员'}
# 空集合
empty_s = set()

2. 常用方法(无下标,不可用while遍历)

方法 作用 代码示例
add(元素) 添加元素(重复则忽略) s.add('itheima')
remove(元素) 删除元素,不存在报错 s.remove('传智播客')
pop() 随机删除一个元素并返回 val = s.pop()
clear() 清空集合 s.clear()
difference(集合2) 取差集(本集合有,集合2无),返回新集合 s3 = s1.difference(s2)
difference_update(集合2) 本集合删除与集合2的交集,修改原集合 s1.difference_update(s2)
union(集合2) 取并集,返回新集合 s3 = s1.union(s2)
len(集合) 统计元素个数 l = len(s)

3. 遍历

仅支持for循环(无序,遍历结果不固定)

cpp 复制代码
s = {1,2,3,4,5}
for i in s:
    print(i)

4. 特点

  • 可容纳多类型元素、可修改

  • 无序(无下标)、不可重复(自动去重)

  • 适合去重、交集/并集/差集计算

七、字典(dict)- 可修改、无序、键值对形式

1. 定义

{}存储键值对(Key: Value) ,Key不可重复(重复会覆盖),Key不可为字典。

cpp 复制代码
# 普通定义
stu_score = {'王力鸿':99, '周杰轮':88, '林俊节':77}
# 嵌套字典(值为字典)
stu_info = {
    '王力鸿': {'语文':77, '数学':66},
    '周杰轮': {'语文':88, '数学':86}
}
# 空字典
empty_dict = {}
empty_dict2 = dict()

2. 取值

通过Key 取值,而非下标

cpp 复制代码
print(stu_score['王力鸿'])          # 99
print(stu_info['王力鸿']['语文'])   # 77

3. 常用方法

方法 作用 代码示例
字典[Key] = Value 新增/更新键值对(Key不存在=新增,存在=更新) stu_score['张学油']=66
pop(Key) 删除键值对,返回Value val = stu_score.pop('王力鸿')
clear() 清空字典 stu_score.clear()
keys() 获取所有Key,返回可迭代对象 keys = stu_score.keys()
len(字典) 统计键值对个数 l = len(stu_score)

4. 遍历

仅支持for循环,默认遍历Key,可通过Key取Value

cpp 复制代码
stu_score = {'王力鸿':99, '周杰轮':88, '林俊节':77}
# 遍历Key
for key in stu_score:
    print(f'学生:{key},分数:{stu_score[key]}')

# 先取所有Key再遍历(等价上式)
for key in stu_score.keys():
    print(f'学生:{key},分数:{stu_score[key]}')

5. 特点

  • 存储键值对,通过Key快速检索Value

  • Key唯一、不可为字典,Value可任意类型/嵌套

  • 无序(无下标)、可修改

  • 适合存储有映射关系的数据(如姓名-成绩、ID-信息)

八、数据容器通用操作

所有5类容器均支持以下操作,部分有专属限制(如集合/字典无下标)。

1. 通用统计

cpp 复制代码
lst = [1,2,3,4,5]
s = 'itheima'
print(len(lst))   # 统计元素个数:5
print(max(s))     # 取最大元素:'t'(字符串按ASCII码比较)
print(min(lst))   # 取最小元素:1

2. 通用类型转换

cpp 复制代码
lst = [1,2,3]
t = (4,5,6)
s = '789'
se = {1,2,3}
# 转列表
print(list(t))    # [4,5,6]
# 转元组
print(tuple(lst)) # (1,2,3)
# 转字符串
print(str(lst))   # '[1,2,3]'
# 转集合(自动去重)
print(set(lst))   # {1,2,3}

3. 通用排序

python 复制代码
# sorted(容器, reverse=True/False),返回排好序的列表
lst = [5,2,9,1]
s = 'bacfe'
print(sorted(lst))        # 升序:[1,2,5,9]
print(sorted(lst, reverse=True)) # 降序:[9,5,2,1]
print(sorted(s))          # 字符串按ASCII排序:['a','b','c','e','f']

4. 通用遍历

  • 支持for循环:所有容器均支持

  • 支持while循环:仅列表、元组、字符串(有下标);集合、字典不支持(无下标)

九、5类数据容器核心对比

特性 列表(list) 元组(tuple) 字符串(str) 集合(set) 字典(dict)
元素类型 任意 任意 仅字符 任意 Key:除字典外任意;Value:任意
下标索引 支持 支持 支持 不支持 不支持
重复元素 支持 支持 支持 不支持 Key不重复,Value可重复
可修改性 支持 不支持 不支持 支持 支持
数据有序
核心使用场景 可修改、可重复的批量数据 不可修改、可重复的批量数据 字符序列存储 数据去重、集合运算 键值对映射(快速检索)

十、经典练习代码

1. 列表筛选偶数(while+for双实现)

python 复制代码
# 原列表
nums = [1,2,3,4,5,6,7,8,9,10]
even_lst = []

# while循环实现
index = 0
while index < len(nums):
    if nums[index] % 2 == 0:
        even_lst.append(nums[index])
    index += 1
print(f'while筛选偶数:{even_lst}')

# for循环实现
even_lst2 = []
for i in nums:
    if i % 2 == 0:
        even_lst2.append(i)
print(f'for筛选偶数:{even_lst2}')

2. 集合去重

python 复制代码
my_list = ['黑马程序员', '传智播客', '黑马程序员', 'itcast', 'itcast']
my_set = set()
# 遍历列表添加到集合(自动去重)
for i in my_list:
    my_set.add(i)
print(f'去重后集合:{my_set}')

3. 字典升职加薪

python 复制代码
# 员工信息字典
staff = {
    '王力鸿': {'部门':'科技部', '工资':3000, '级别':1},
    '周杰轮': {'部门':'市场部', '工资':5000, '级别':2},
    '张学油': {'部门':'科技部', '工资':4000, '级别':1}
}
# 遍历所有员工,级别1则升职加薪
for name in staff:
    if staff[name]['级别'] == 1:
        staff[name]['级别'] += 1
        staff[name]['工资'] += 1000
print(f'加薪后信息:{staff}')

4. 序列切片取指定内容

python 复制代码
# 原字符串:"万过薪月,员序程马黑来,nohtyP学"
s = "万过薪月,员序程马黑来,nohtyP学"
# 步骤1:倒序字符串 → 学Python,来黑马程序员,月薪过万
s_rev = s[::-1]
# 步骤2:切片取"黑马程序员"
result = s_rev[9:14] # 切片不包含最后一个下标
print(f'结果:{result}')  # 黑马程序员
相关推荐
知识分享小能手1 小时前
edis入门学习教程,从入门到精通,Redis编程开发知识点详解(4)
数据库·redis·学习
qq_334903152 小时前
使用Flask快速搭建轻量级Web应用
jvm·数据库·python
E_ICEBLUE2 小时前
在 Python 中对比 Word 文档:自动生成修订报告
python·word
代码探秘者2 小时前
【大模型应用】6.RAG 场景下的向量+关键词混合检索
java·开发语言·人工智能·python·spring
三水不滴2 小时前
Elasticsearch 实战系列(二):SpringBoot 集成 Elasticsearch,从 0 到 1 实现商品搜索系统
经验分享·spring boot·笔记·后端·elasticsearch·搜索引擎
Ynchen. ~2 小时前
快速复习笔记(随笔)
笔记
炽烈小老头2 小时前
【 每天学习一点算法 2026/03/18】全排列
学习·算法
chikaaa2 小时前
RabbitMQ 核心机制总结笔记
java·笔记·rabbitmq·java-rabbitmq
小小怪7502 小时前
将Python Web应用部署到服务器(Docker + Nginx)
jvm·数据库·python