Skip to content

Python 常用数据类型

Python 写业务代码时,最常打交道的就是这五类数据:strlisttupledictset。先记住它们各自适合装什么数据,再去记常用方法,会比死背 API 更稳。

一段文本

str。重点掌握 strip()split()join()replace()f-string

多条记录

list。需要按顺序保存、遍历、排序、增删改查时,列表最常见。

固定结构

tuple。例如坐标、固定配置、函数返回的多个值。

结构化对象

dict。接口数据、用户信息、配置项、计数统计都优先想到字典。

去重与关系判断

set。成员判断、交集、并集、差集都很适合。

类型 顺序特点 是否可变 核心特点 常见场景
str 有序 不可变 文本序列,支持索引、切片、遍历 文本清洗、提示词、日志、接口字段
list 有序 可变 最常用容器,可增删改查 存放一组记录、批量处理数据
tuple 有序 不可变 固定结构,可解包 坐标、固定配置、函数多返回值
dict 保留插入顺序 可变 key: value 映射 JSON、用户信息、配置、统计计数
set 无序 可变 元素唯一,自动去重 去重、成员判断、交并差运算

字符串是文本数据,也是不可变序列。任何看起来像“修改字符串”的操作,本质上都是生成一个新字符串。

s = "Python"
print(len(s)) # 6
print(s[0]) # P
print(s[1:4]) # yth
print(s[::-1]) # nohtyP
场景 方法 记忆点
去空格 strip() / lstrip() / rstrip() 清理输入和文件内容常用
替换 replace(old, new) 返回新字符串,不改原字符串
拆分 split(sep) 不传参数时按空白分割
拼接 "sep".join(items) 比循环里反复 + 更常用
大小写 lower() / upper() / title() 统一格式、做匹配判断
判断 startswith() / endswith() / isdigit() 做输入校验和格式判断
raw = " a,b,c "
parts = raw.strip().split(",")
print(parts) # ['a', 'b', 'c']
print("-".join(parts)) # a-b-c
print("hello".replace("l", "L")) # heLLo

格式化字符串优先用 f-string

name = "Tom"
age = 18
print(f"姓名={name}, 年龄={age}")
print(f"明年年龄={age + 1}")
print(f"保留两位小数:{3.14159:.2f}")

常见坑:

坑点 原因 处理方式
s[0] = "X" 报错 字符串不可变 用切片或 replace() 生成新字符串
"1" + 2 报错 字符串和数字不能直接相加 int()str() 转换
split() 结果不对 默认按空白分割 逗号分隔要写 split(",")

列表是有序、可变的容器,适合保存一组同类数据。虽然 Python 列表可以混放不同类型,但项目里尽量保持同类,代码会更清晰。

nums = [10, 20, 30, 40, 50]
print(nums[0]) # 10
print(nums[-1]) # 50
print(nums[1:4]) # [20, 30, 40]
print(nums[::2]) # [10, 30, 50]
操作 写法 注意点
追加 append(x) 加到末尾
插入 insert(index, x) 插入指定位置
合并 extend(items) 把另一组元素展开加进来
删除值 remove(x) 删除第一个匹配值,不存在会报错
弹出 pop() / pop(index) 删除并返回元素
删除索引 del a[index] 直接删除指定位置
修改 a[index] = value 列表可原地修改
a = [1, 2, 3]
a.append(4)
a.insert(1, 99)
a.extend([5, 6])
a.remove(99)
x = a.pop()
del a[0]
a[0] = 100
print(a, x)

排序时要记住返回值:

nums = [3, 1, 2]
nums.sort()
print(nums) # [1, 2, 3]
nums2 = sorted([3, 1, 2], reverse=True)
print(nums2) # [3, 2, 1]
写法 是否修改原列表 返回值
list.sort() None
sorted(list) 新列表
list.reverse() None

遍历时常用 enumerate() 拿到下标和值:

nums = [10, 20, 30]
for i, v in enumerate(nums):
print(i, v)
print(sum(nums), min(nums), max(nums))

元组和列表很像,但元组不可变,适合表达“这个结构不应该被修改”。

t1 = (1, 2, 3)
t2 = (4,) # 单元素元组必须带逗号
t3 = 5, 6, 7 # 也可以省略括号

常用操作:

t = (10, 20, 20, 30)
print(t[0])
print(t[1:3])
print(t.count(20))
print(t.index(30))

解包很常用:

a, b = (1, 2)
x, y = y, x

常见坑:

坑点 原因 记法
(4) 不是元组 括号只改变优先级 单元素元组必须写 (4,)
不能 append() 元组不可变 要修改就用列表
元组能做字典 key 元组不可变、可哈希 前提是内部元素也可哈希

字典是 Python 里组织结构化数据的核心。接口返回的 JSON、用户信息、配置项、统计结果,通常都会用字典表示。

user = {"name": "Tom", "age": 18}
print(user["name"]) # 键不存在会 KeyError
print(user.get("score", 0)) # 推荐安全访问
user = {"name": "Tom", "age": 18}
user["score"] = 95
user["age"] = 19
user.update({"city": "SZ"})
del user["city"]
score = user.pop("score")
print(user, score)

遍历字典时,业务代码里最常用的是 items()

user = {"name": "Tom", "age": 18}
for key in user:
print(key, user[key])
for value in user.values():
print(value)
for key, value in user.items():
print(key, value)

Python 3.9+ 可以用 | 合并字典:

a = {"x": 1}
b = {"y": 2}
c = a | b
print(c) # {'x': 1, 'y': 2}

常见坑:

坑点 原因 处理方式
user["missing"] 报错 键不存在会 KeyError get() 或先判断 key in user
list / dict 不能当 key key 必须可哈希 常用 strinttuple 当 key
字典不是“对象属性” user.name 不等于 user["name"] 普通字典用中括号访问

集合只保存唯一元素,适合去重、成员测试、交集、并集、差集。

s1 = {1, 2, 2, 3}
print(s1) # {1, 2, 3}
empty_set = set() # {} 是空字典,不是空集合

增删元素:

s = {1, 2, 3}
s.add(4)
s.remove(2) # 不存在会 KeyError
s.discard(99) # 不存在也不报错

集合运算:

old_users = {"a", "b", "c"}
new_users = {"b", "c", "d"}
print(old_users & new_users) # 交集:{'b', 'c'}
print(old_users | new_users) # 并集:{'a', 'b', 'c', 'd'}
print(new_users - old_users) # 新增:{'d'}
print(old_users - new_users) # 流失:{'a'}

常见坑:

坑点 原因 记法
{} 不是空集合 {} 表示空字典 空集合写 set()
set 不能按索引取值 set 无序 需要顺序就用 list
set 不能存列表 元素必须可哈希 可存字符串、数字、元组

strlisttuple 都是有序序列,可以用索引和切片。

items = [10, 20, 30, 40]
print(items[0])
print(items[-1])
print(items[1:3])

dictset 不按位置取数据。