Python中组合数据类型(也叫复合数据类型、容器类型)是指可以存储多个元素的类型,主要包括以下四种:
| 类型 | 英文 | 符号 | 是否有序 | 是否可变 | 元素是否可重复 | 索引方式 | 主要用途 |
|---|---|---|---|---|---|---|---|
| 列表 | list | [] | 有序 | 可变 | 可重复 | 整数索引 | 经常需要增删改的有序数据 |
| 元组 | tuple | () | 有序 | 不可变 | 可重复 | 整数索引 | 固定不变的数据、函数多返回值、做key |
| 集合 | set | {} 或 set() | 无序 | 可变 | 不可重复 | 无索引(只能成员判断) | 去重、集合运算(交并差) |
| 字典 | dict | {key:value} | 有序(3.7+) | 可变 | key不可重复 | key索引(任意不可变类型) | 键值对映射、查找速度极快 |
下面按学习顺序逐个详细说明(适合做学习笔记使用):
1. 列表(list)——最常用的可变序列
# 创建方式
lst1 = [] # 空列表
lst2 = [1, 2.5, "hello", True, [10,20]] # 任意类型,允许嵌套
lst3 = list("中国加油") # ['中','国','加','油']
lst4 = list(range(5)) # [0,1,2,3,4]
# 常用操作(增删改查)
fruits = ["apple", "banana", "cherry"]
# 查
print(fruits[1]) # banana
print(fruits[-1]) # cherry(倒数第一个)
print("banana" in fruits) # True
# 改
fruits[1] = "blueberry"
# 增
fruits.append("dragon") # 末尾添加
fruits.insert(1, "kiwi") # 在索引1位置插入
fruits.extend(["mango", "orange"]) # 批量添加
# 删
fruits.pop() # 删除并返回最后一个
fruits.pop(1) # 删除指定位置
fruits.remove("cherry") # 删除第一个匹配的元素(不存在会报错)
del fruits[0] # 删除指定位置
fruits.clear() # 清空
# 切片(重要!)
nums = [0,1,2,3,4,5,6,7,8,9]
print(nums[2:7]) # [2,3,4,5,6]
print(nums[::2]) # [0,2,4,6,8] 步长2
print(nums[::-1]) # [9,8,7,...,0] 逆序
# 排序(原地修改)
nums.sort() # 升序
nums.sort(reverse=True) # 降序
fruits.sort(key=len) # 按字符串长度排序
2. 元组(tuple)——不可变序列
t1 = (1, 2, 3)
t2 = 10, 20, 30 # 括号可以省略(推荐写上)
t3 = (5,) # 只有一个元素必须加逗号!否则是整数5
t4 = tuple([1,2,3]) # 从列表转元组
# 元组特点:不可修改,但内容如果是可变对象,内部仍可改
t = (1, [2,3], 4)
# t[1] = 99 # 报错!不能改元组本身
t[1].append(99) # 可以!因为改的是列表内部 → (1, [2,3,99], 4)
# 常用场景
x, y, z = 10, 20, 30 # 批量赋值(元组解包)
a, b = b, a # 交换变量(Python特色写法)
def func(): return 100, 200 # 函数返回多个值其实返回的是元组
3. 集合(set)——无序、不重复
s1 = {1, 2, 2, 3} # {1,2,3} 自动去重
s2 = set("abacad") # {'a','b','c','d'}
s3 = set([1,1,2,3]) # {1,2,3}
# 集合运算(非常强大)
a = {1,2,3,4}
b = {3,4,5,6}
print(a | b) # 并集 {1,2,3,4,5,6}
print(a & b) # 交集 {3,4}
print(a - b) # 差集 {1,2}
print(a ^ b) # 对称差集 {1,2,5,6}(在a或b中但不同时在两者中)
# 成员判断(速度非常快)
print(3 in a) # True
# 添加/删除
a.add(7)
a.remove(1) # 不存在会报错
a.discard(999) # 不存在也不会报错
a.pop() # 随机删除并返回一个元素
4. 字典(dict)——键值对映射(Python中使用最频繁的高级数据结构)
# 创建
d1 = {} # 空字典
d2 = {"name":"张三", "age":18, "city":"北京"}
d3 = dict(name="李四", age=20) # 另一种写法
d4 = dict([("a",1), ("b",2)]) # 从二维列表/元组创建
# 访问
print(d2["name"]) # 张三
print(d2.get("score", 0)) # 不存在返回默认值0(推荐!)
# 修改/新增
d2["score"] = 95 # 键存在→修改,不存在→新增
d2.setdefault("gender", "男") # 键不存在才添加
# 删除
d2.pop("age") # 删除并返回value
del d2["city"]
d2.clear()
# 遍历(非常常用)
for k in d2: # 默认遍历key
print(k, d2[k])
for k,v in d2.items(): # 同时拿到key和value
print(k, "->", v)
# 3.7+ 字典保持插入顺序
快速对比记忆口诀
- 需要改内容 → 用列表
- 内容固定不变 → 用元组
- 只要去重或做集合运算 → 用集合
- 要根据含义查找(名字→成绩、学号→信息)→ 用字典
小练习(你可以自己跑跑看)
- 把字符串 “hello world python” 变成单词列表,再转成集合看看有什么变化?
- 用字典统计这段话里每个字符出现的次数(提示:可以用 dict.get() 或 collections.Counter)
- 交换两个变量的值,不用第三变量(用元组解包)
- 有一个列表
[1,3,5,2,4,3,1,6],去重并升序输出
祝你Python学习顺利!
下一节准备学什么?文件操作?函数?还是类和面向对象?可以告诉我,我继续帮你整理~