前言
在 Python 编程的世界里,列表(List)和元组(Tuple)是两种非常基础且常用的数据结构。它们都可以存储一系列元素,但在特性和操作上却存在着不少差异。今天,我们就来详细探讨一下 Python 中列表与元组的操作。
一、列表与元组的基本概念
列表是一种可变的序列类型,用方括号 “[]” 来表示,元素之间用逗号分隔。它可以包含任意类型的数据,并且元素的值可以被修改、添加或删除。例如:
list1 = [1, 2, 'a', True]
元组则是一种不可变的序列类型,用圆括号 “()” 表示,元素之间同样用逗号分隔。一旦创建,元组中的元素就不能被修改、添加或删除。比如:
tuple1 = (1, 2, 'b', False)
二、列表(List)的基本操作
1.列表的创建
列表是Python中最灵活的数据结构之一,用方括号[]
表示,元素之间用逗号分隔。
# 创建空列表
empty_list = []
empty_list = list()
# 创建包含元素的列表
numbers = [1, 2, 3, 4, 5]
fruits = ['apple', 'banana', 'orange']
mixed = [1, 'hello', 3.14, True]
2.列表的访问
列表支持索引和切片操作:
my_list = ['a', 'b', 'c', 'd', 'e']
# 索引访问(从0开始)
print(my_list[0]) # 输出: 'a'
print(my_list[-1]) # 输出: 'e'(负索引表示从末尾开始)
# 切片操作 [start:end:step]
print(my_list[1:3]) # 输出: ['b', 'c']
print(my_list[::2]) # 输出: ['a', 'c', 'e']
print(my_list[::-1]) # 输出: ['e', 'd', 'c', 'b', 'a'](反转列表)
3.列表的修改
列表是可变(mutable)的,可以修改其元素:
my_list = [1, 2, 3, 4]
# 修改单个元素
my_list[1] = 20
print(my_list) # 输出: [1, 20, 3, 4]
# 修改切片
my_list[1:3] = [200, 300]
print(my_list) # 输出: [1, 200, 300, 4]
# 添加元素
my_list.append(5) # 末尾添加
my_list.insert(1, 1.5) # 在索引1处插入
print(my_list) # 输出: [1, 1.5, 200, 300, 4, 5]
# 合并列表
my_list.extend([6, 7, 8])
# 等价于 my_list += [6, 7, 8]
print(my_list) # 输出: [1, 1.5, 200, 300, 4, 5, 6, 7, 8]
4. 列表的删除操作
my_list = ['a', 'b', 'c', 'd', 'e']
# 按索引删除
del my_list[1] # 删除索引1的元素
popped = my_list.pop() # 删除并返回最后一个元素
popped = my_list.pop(1) # 删除并返回索引1的元素
# 按值删除
my_list.remove('c') # 删除第一个出现的'c'
# 清空列表
my_list.clear()
5. 列表的其他常用操作
my_list = [1, 2, 3, 2, 4]
# 查找元素
index = my_list.index(2) # 返回第一个2的索引
count = my_list.count(2) # 统计2出现的次数
exists = 3 in my_list # 检查元素是否存在
# 排序
my_list.sort() # 原地排序
sorted_list = sorted(my_list) # 返回新排序列表
# 反转
my_list.reverse() # 原地反转
reversed_list = my_list[::-1] # 创建反转后的新列表
# 列表复制
shallow_copy = my_list.copy() # 浅拷贝
shallow_copy = my_list[:] # 另一种浅拷贝方式
二、元组(Tuple)的基本操作
1. 元组的创建
元组用圆括号()
表示,元素之间用逗号分隔。元组是不可变的(immutable)。
# 创建空元组
empty_tuple = ()
empty_tuple = tuple()
# 创建包含元素的元组
numbers = (1, 2, 3, 4, 5)
fruits = ('apple', 'banana', 'orange')
# 单元素元组需要加逗号
single_element = (42,) # 注意逗号
not_a_tuple = (42) # 这不是元组,是整数
# 可以省略括号
colors = 'red', 'green', 'blue'
2. 元组的访问
元组支持索引和切片操作,与列表类似
my_tuple = ('a', 'b', 'c', 'd', 'e')
# 索引访问
print(my_tuple[0]) # 输出: 'a'
print(my_tuple[-1]) # 输出: 'e'
# 切片操作
print(my_tuple[1:3]) # 输出: ('b', 'c')
print(my_tuple[::2]) # 输出: ('a', 'c', 'e')
3. 元组的不可变性
元组一旦创建,其内容不能修改:
my_tuple = (1, 2, 3)
# 以下操作都会引发TypeError
my_tuple[1] = 20
my_tuple.append(4)
del my_tuple[1]
4. 元组的其他操作
my_tuple = (1, 2, 3, 2, 4)
# 查找元素
index = my_tuple.index(2) # 返回第一个2的索引
count = my_tuple.count(2) # 统计2出现的次数
exists = 3 in my_tuple # 检查元素是否存在
# 排序(返回列表)
sorted_list = sorted(my_tuple)
三、列表与元组的共同操作
作为序列类型,列表和元组支持许多相同的操作:
1. 序列操作
seq1 = [1, 2, 3] # 或 (1, 2, 3)
seq2 = [4, 5, 6] # 或 (4, 5, 6)
# 拼接
combined = seq1 + seq2 # [1, 2, 3, 4, 5, 6]
# 重复
repeated = seq1 * 3 # [1, 2, 3, 1, 2, 3, 1, 2, 3]
# 长度、最小值、最大值
length = len(seq1)
min_val = min(seq1)
max_val = max(seq1)
2. 遍历
for item in my_list: # 或my_tuple
print(item)
# 同时获取索引和值
for index, item in enumerate(my_list):
print(index, item)
总结
列表和元组是Python中最基础也是最重要的数据结构之一。理解它们的特性和区别对于编写高效、可维护的Python代码至关重要。记住:
-
列表是可变的,适合存储需要修改的数据集合
-
元组是不可变的,适合存储固定数据或作为字典键
-
两者都支持丰富的序列操作
-
根据具体需求选择合适的数据结构
掌握列表和元