在 Python 编程中,列表(List)和元组(Tuple)是两种最常用的序列类型,它们如同程序中的 “数据容器”,能够有序存储多个元素,为数据的组织和处理提供了极大便利。列表以其灵活性支持动态修改,元组则以不可变性保障数据安全,二者各有特性,却又存在诸多共通的操作逻辑。掌握列表与元组的操作,是提升 Python 编程效率、构建复杂数据结构的基础。接下来,让我们一同探索列表与元组操作的核心知识。
列表是一种可变序列,元素可以被修改、添加或删除,用方括号 []
定义,元素之间用逗号分隔。其特性包括:
元素可以是不同数据类型(如数字、字符串、列表等);
支持动态调整长度;
元素有序,可通过索引访问。
# 空列表
empty_list = []
# 同类型元素列表
nums = [1, 2, 3, 4, 5]
# 混合类型元素列表
mixed_list = [10, "python", True, [1, 2]]
# 通过列表推导式创建
squares = [x**2 for x in range(5)]
元组是一种不可变序列,元素创建后无法修改,用圆括号 ()
定义(单元素元组需加逗号避免歧义)。其特性包括:
元素同样支持多类型,但创建后不可增删改;
内存占用更小,访问速度更快;
可作为字典的键(因不可变)。
创建示例:
# 空元组
empty_tuple = ()
# 多元素元组
coords = (10, 20, 30)
# 单元素元组(必须加逗号)
single_tuple = (5,)
# 省略括号的元组(仅在无歧义时使用)
color_tuple = "red", "green", "skyblue"
# 嵌套元组
nested_tuple = (1, (2, 3), "a")
列表和元组均支持通过索引(从 0 开始)访问单个元素,或通过切片获取子序列,操作方式完全一致。
基本语法:
索引访问:序列[索引]
(负索引表示从末尾开始,如 -1
为最后一个元素);
切片:序列[起始索引:结束索引:步长]
(包含起始索引,不包含结束索引,步长为间隔)。
示例:
# 列表访问
fruits = ["apple", "banana", "cherry", "date"]
print(fruits[1])
print(fruits[-2])
print(fruits[1:3])
# 元组访问
colors = ("red", "green", "blue", "yellow")
print(colors[2])
print(colors[::2])
列表的可变特性使其拥有丰富的修改方法,主要包括元素添加、删除、修改等。
元素修改(直接通过索引重新赋值):
nums = [1, 2, 3]
nums[1] = 20
print(nums)
元素添加
append(x)
:在列表末尾添加元素 x
;
insert(i, x)
:在索引 i
处插入元素 x
;
extend(iterable)
:将可迭代对象的元素逐个添加到列表末尾。
fruits = ["apple"]
fruits.append("banana")
fruits.insert(1, "orange")
fruits.extend(["cherry", "date"])
元素删除
remove(x)
:删除第一个值为 x
的元素(若不存在则报错);
pop(i)
:删除索引 i
处的元素并返回该元素(默认删除最后一个);
del 列表[i]
:删除索引 i
处的元素(无返回值)。
fruits = ["apple", "orange", "banana"]
fruits.remove("orange")
popped = fruits.pop()
del fruits[0]
其他常用方法
sort()
:对列表排序(默认升序,reverse=True
为降序);
reverse()
:反转列表元素顺序;
count(x)
:统计元素 x
出现的次数。
nums = [3, 1, 4, 1, 5]
nums.sort()
nums.reverse()
print(nums.count(1))
不可修改的特性
尝试修改元组元素会直接报错:
coords = (10, 20)
# 报错:TypeError: 'tuple' object does not support item assignment
coords[0] = 15
常用方法
index(x)
:返回第一个值为 x
的元素的索引(若不存在则报错);
count(x)
:统计元素 x
出现的次数。
colors = ("red", "green", "red", "blue")
print(colors.index("red"))
print(colors.count("red"))
除上述特有操作外,列表和元组还支持以下共通操作:
长度计算:len(序列)
返回元素个数;
成员判断:x in 序列
判断元素 x
是否存在;
拼接与重复:+
拼接两个序列,*n
重复序列 n
次(元组拼接后仍为元组,列表同理)。
# 列表共通操作
list1 = [1, 2]
list2 = [3, 4]
print(len(list1))
print(2 in list1)
print(list1 + list2)
print(list1 * 2)
# 元组共通操作
tuple1 = (1, 2)
tuple2 = (3, 4)
print(len(tuple1))
print(3 in tuple2)
print(tuple1 + tuple2)
print(tuple1 * 2)
列表和元组可通过内置函数相互转换,以满足不同场景需求:
列表转元组:tuple(列表)
;
元组转列表:list(元组)
。
示例:
# 列表转元组
my_list = [1, 2, 3]
my_tuple = tuple(my_list)
print(my_tuple)
# 元组转列表
my_tuple = ("a", "b", "c")
my_list = list(my_tuple)
print(my_list)
动态数据存储:如购物车商品、用户输入的动态列表等,需要频繁添加或删除元素时使用。
# 模拟购物车
cart = []
while True:
item = input("请输入商品(输入q结束):")
if item == "q":
break
cart.append(item)
print(f"购物车商品:{cart}")
需要排序或修改的数据:如学生成绩排序、游戏排行榜等。
scores = [85, 92, 78, 90]
scores.sort(reverse=True) # 降序排序
print(f"成绩排名:{scores}")
存储不可变数据:如坐标信息、配置参数等,避免数据被意外修改。
# 屏幕分辨率配置(固定不变)
resolution = (1920, 1080)
print(f"宽度:{resolution[0]},高度:{resolution[1]}")
函数返回多个值:Python 函数返回多个值时,本质是返回一个元组,可通过 “解包” 快速获取。
def get_user_info():
name = "Alice"
age = 25
gender = "female"
return name, age, gender # 隐式返回元组
# 元组解包
name, age, gender = get_user_info()
print(f"姓名:{name},年龄:{age},性别:{gender}")
作为字典的键:因元组不可变,可作为字典的键,而列表不行。
# 用元组作为键存储城市坐标
city_coords = {
("北京",): (39.9042, 116.4074),
("上海",): (31.2304, 121.4737)
}
print(city_coords[("北京",)])
列表与元组作为 Python 中最基础的序列类型,虽特性不同(可变 vs 不可变),但共同承担着数据存储与组织的核心功能。列表以灵活性见长,适合处理动态变化的数据;元组以稳定性为优,适合存储固定不变的信息或作为哈希键。
掌握二者的创建、访问、修改(仅限列表)、转换等操作,以及各自的应用场景,能帮助我们在编程中选择更合适的数据结构,提升代码效率与可读性。无论是构建简单的任务列表,还是处理复杂的多维数据,列表与元组都是不可或缺的工具。希望通过本文的学习,你能熟练运用这两种序列类型,为后续的 Python 编程打下坚实基础。