Python基础数据类型与核心操作复习笔记
📌 错题回顾
1. eval()只是去掉最外层的引号,不是转变成常量;
2. eval()函数又称为评估函数,作用是去掉参数中最外层引号并执行剩余语句;
3. 调用函数时如果不想传参数,函数定义时必须用默认参数。
1. 序列类型(列表、元组)
1.1 序列定义
序列是Python中元素有序、支持索引和切片操作的数据结构,主要包括列表(list,可变)和元组(tuple,不可变)。
1.2 序列通用操作
- 索引:通过下标访问元素,支持正索引(从0开始)和负索引(从-1开始,表示最后一个元素)
- 切片:通过
seq[start:end:step]获取子序列,左闭右开区间 - 遍历:使用for循环逐个访问元素
- 长度计算:
len(seq)返回元素个数 - 成员判断:
in/not in判断元素是否存在 - 拼接与重复:
+拼接同类型序列,*重复序列元素
# 序列操作示例 # 索引与切片 seq = [1, 2, 3, 4, 5] print(seq[0]) # 正索引:1 print(seq[-1]) # 负索引:5 print(seq[1:4]) # 切片:[2, 3, 4] # 拼接与重复 print([1,2] + [3,4])# 拼接:[1,2,3,4] print((1,2)*3) # 重复:(1,2,1,2,1,2) # 成员判断 print(3 in seq) # True 1.3 可变与不可变序列的区别
- 列表(list):可变序列,支持增删改元素(append、insert、remove、pop、del)
- 元组(tuple):不可变序列,无法直接修改元素,需通过拼接生成新元组实现"修改"
# 列表(可变)操作 list1 = [1, 2, 3] list1.append(4) # 添加元素:[1,2,3,4] list1.pop(1) # 删除索引1的元素:[1,3,4] # 元组(不可变)操作 tuple1 = (1, 2, 3) # tuple1[0] = 0 # 报错:TypeError new_tuple = tuple1 + (4,) # 生成新元组:(1,2,3,4) ⚠️ 易错点
元组中若包含可变元素(如列表),可变元素的内部内容可修改,但元组的结构(元素个数、位置)仍不可变。
2. 集合类型(set、frozenset)
2.1 集合定义
集合是无序、不重复的元素集合,分为可变集合(set)和不可变集合(frozenset),元素必须是不可变类型(数字、字符串、元组等)。
2.2 集合定义方法
(1)可变集合(set)
- 大括号定义:
{元素1, 元素2, ...}(重复元素自动去重) - set()函数:
set(可迭代对象)(空集合必须用set(),{}是空字典) - 集合推导式:
{表达式 for 变量 in 可迭代对象 if 条件}
(2)不可变集合(frozenset)
通过frozenset(可迭代对象)定义,不支持增删改,可作为字典键或其他集合的元素。
# 集合定义示例 # 可变集合 s1 = {1, 2, 2, 3} # 自动去重:{1,2,3} s2 = set([1,2,3]) # 列表转集合:{1,2,3} s3 = {x*2 for x in [1,2,3]}# 集合推导式:{2,4,6} s4 = set() # 空集合(正确写法) # 不可变集合 fs1 = frozenset([1,2,3]) # frozenset({1,2,3}) fs2 = frozenset() # 空不可变集合 ⚠️ 易错点
1. {} 表示空字典,而非空集合,空集合必须用 set();
2. 集合元素不能是可变类型(列表、字典、集合),否则会报错。
3. 字典类型
3.1 字典定义
字典是无序的键值对集合,键(key)必须是不可变类型(数字、字符串、元组),值(value)可以是任意类型。
3.2 空字典定义
空字典使用{}或dict()定义,注意与空集合区分(空集合用set())。
# 字典定义示例 dict1 = {} # 空字典 dict2 = {"name": "Python", "version": 3.10} # 普通字典 dict3 = dict([("a",1), ("b",2)]) # 列表转字典 4. 不可变类型特性
4.1 核心定义
不可变类型指对象创建后,其自身的值或内部元素的结构无法直接修改,"修改"操作实质是创建新对象。
4.2 常见不可变类型
- 字符串(str):无法直接修改单个字符,需通过拼接生成新字符串
- 元组(tuple):无法直接修改元素,需拼接生成新元组
- 数字(int、float、complex):运算操作生成新数字对象
# 不可变类型示例 # 字符串 s = "hello" # s[0] = "H" # 报错:TypeError s_new = "H" + s[1:] # 生成新字符串:"Hello" # 数字 a = 5 a = a + 3 # 原对象5不变,a指向新对象8 4.3 不可变类型的价值
保证数据稳定性,适合多线程和共享数据场景;未被引用的旧对象会被垃圾回收,优化内存管理。
5. range对象与列表转换
5.1 range对象特性
range(start, end, step)生成一个可迭代的range对象,并非列表,仅存储起始、结束和步长信息,节省内存。
5.2 列表转换
若需将range对象转为列表,需用list(range(...))显式转换,否则变量类型为range而非列表。
# range对象与列表转换 r = range(1, 9) print(type(r)) # ,不是列表 # 转为列表 list1 = list(range(1, 9)) print(type(list1)) # ,结果:[1,2,3,4,5,6,7,8] ⚠️ 易错点
直接赋值list1 = range(1,9)会导致list1类型为range,而非预期的列表,需注意显式转换。
6. 核心知识点总结
- 序列(列表/元组):有序、支持索引切片,列表可变、元组不可变
- 集合:无序不重复,空集合用set(),不可变集合用frozenset()
- 字典:键值对集合,空字典用{},键必须是不可变类型
- 不可变类型:字符串、元组、数字,修改实质是创建新对象
- range:生成可迭代对象,转列表需用list()显式转换
掌握这些基础数据类型的定义、操作和区别,是Python编程的核心基础,建议结合示例代码反复练习,重点关注易错点的区分~