列表与元组
一、列表
列表的特点
列表有以下特点:
- 可重复性:列表的元素是可以重复的;
- 有序性:列表会严格记录每个元素“放进去的先后位置”,并且你可以通过下标(索引)精准地找到任意位置的元素;
- 可修改性:可以对列表内元素进行修改,如增加一个新元素,删改某个元素等;
- 异构性(多样性):一个列表里可以放不同类型的数据,如:
[1, "a", True]; - 动态性(自动扩容):长度不固定,随增删操作自动变化,类似于 C++ 的
vector容器。
二、元组
介绍
元组是不可变的序列,和列表类似,但创建以后无法对其进行修改(只读)。
特点
可以储存不同类型的元素,元素可以重复、有序,但不可以修改(支持索引访问、切片)。
定义
#定义一:元组名称=(元素1,元素2,...)t1=(1,2,3,'a','b')#定义二:定义空元组t2=()#定义三:使用内置函数 tuple() (从其他类型转换)#可以把列表、字符串、集合等其他可迭代对象转换成元组# 从列表转元组t4=tuple([1,2,3])print(t4)# 输出: (1, 2, 3)print(type(t4))# 输出: <class 'tuple'># 从字符串转元组(每个字符变成一个元素)t5=tuple("abc")print(t5)# 输出: ('a', 'b', 'c')#定义四:省略括号的“隐式元组”(Python 特有)#只要用逗号分隔多个值,即使没有括号,Python 也会自动把它们打包成元组。这常用于函数返回多个值# 隐式定义(逗号打包)t6=1,2,3print(t6)# 输出: (1, 2, 3)print(type(t6))# 输出: <class 'tuple'># 实际应用:函数返回多个值defget_user():return"张三",18# 自动打包成元组返回user_info=get_user()print(user_info)# 输出: ('张三', 18)常见方法
count():统计某元素在元组里出现的次数。
index():返回某个元素在元组里第一次出现的索引号(若元素不存在,则抛出 ValueError 异常)。
元组与解包、组包
组包(packing):将多个值合并到一个容器中(列表,元组等)
解包(unpacking):将容器中的元素分别赋值给多个变量
""" 标题:元组组包与解包实现变量交换 注解: 第 1 步(组包 Packing):右边的 b, a 会被打包(组包)成一个临时的元组(Tuple)。此时内存里会有一个临时对象 (20, 10)。 第 2 步(解包 Unpacking):左边的 a, b 会把这个临时元组解包,按顺序把 20 赋给 a,把 10 赋给 b。 第 3 步(销毁):这个临时的元组 (20, 10) 使命完成,被垃圾回收。 """# 1. 初始化两个变量a=10# 变量 a 赋值为整数 10b=20# 变量 b 赋值为整数 20# 2. 核心交换操作(利用元组组包与解包)# 执行顺序(逻辑上):# Step 1(组包):右侧的 b, a 被隐式打包成一个临时元组 -> (20, 10)# Step 2(解包):左侧的 a, b 接收这个元组,按顺序赋值 -> a=20, b=10a,b=b,a# 3. 打印交换结果# 此时 a 为 20,b 为 10,完美交换print(f'a:{a}, b:{b}')# 输出: a:20, b:10易错点
在定义单元素元组时,需要在单个元素后加上逗号,否则 Python 会将其解释为普通括号表达式:
t1=(666,)print(type(t1))# 输出:<class 'tuple'>t2=(666)print(type(t2))# 输出:<class 'int'>,原因在于运算符的优先级,(666) 被当作数学运算的括号处理