Python 列表(List)与元组(Tuple)详解
在 Python 中,列表(List)和元组(Tuple)是两种常用的序列类型,用于存储多个元素。它们的核心区别在于可变性:列表是可变的(元素可修改),而元组是不可变的(元素一旦创建就无法修改)。本文将详细介绍两者的用法、区别及适用场景。
列表(List):可变的序列
列表是 Python 中最灵活的序列类型,使用方括号 []
定义,元素之间用逗号分隔,支持添加、删除、修改等操作。
基本定义与创建
1 2 3 4 5 6
| empty_list = []
mixed_list = [1, "apple", 3.14, True]
nested_list = [1, [2, 3], [4, [5, 6]]]
|
访问元素
通过索引(下标)访问元素,索引从 0
开始,支持负数索引(从末尾计数,-1
表示最后一个元素)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| fruits = ["apple", "banana", "cherry", "date"]
print(fruits[0]) print(fruits[-1])
print(fruits[1:3]) print(fruits[:2]) print(fruits[2:]) print(fruits[::2])
fruits_copy = fruits[:]
|
修改元素
列表是可变的,可直接通过索引修改元素:
1 2 3
| numbers = [1, 2, 3, 4] numbers[1] = 20 print(numbers)
|
添加元素
append(x)
:在列表末尾添加元素 x
。
insert(index, x)
:在指定索引 index
处插入元素 x
。
extend(iterable)
:将可迭代对象(如列表、元组)的元素添加到末尾。
1 2 3 4 5 6 7 8 9 10
| colors = ["red", "green"]
colors.append("blue") print(colors)
colors.insert(1, "yellow") print(colors)
colors.extend(["purple", "orange"]) print(colors)
|
删除元素
del list[index]
:删除指定索引的元素。
list.remove(x)
:删除第一个值为 x
的元素(若不存在则报错)。
list.pop(index)
:删除并返回指定索引的元素(默认删除最后一个)。
1 2 3 4 5 6 7 8 9 10 11
| languages = ["Python", "Java", "C++", "Python"]
del languages[1] print(languages)
languages.remove("Python") print(languages)
popped = languages.pop() print(popped) print(languages)
|
常用操作
len(list)
:获取列表长度。
list.count(x)
:统计元素 x
出现的次数。
list.sort()
:对列表排序(原地修改)。
list.reverse()
:反转列表(原地修改)。
1 2 3 4 5 6 7 8 9 10
| nums = [3, 1, 4, 1, 5]
print(len(nums)) print(nums.count(1))
nums.sort() print(nums)
nums.reverse() print(nums)
|
元组(Tuple):不可变的序列
元组使用小括号 ()
定义,元素不可修改,适合存储不需要变更的数据。
基本定义与创建
1 2 3 4 5 6 7 8 9 10
| tup1 = (1, 2, 3, 4)
single_tuple = (5,)
empty_tuple = ()
implicit_tuple = 10, 20, 30
nested_tuple = (1, (2, 3), (4, 5, 6))
|
访问元素
元组的访问方式与列表完全相同,支持索引和分片:
1 2 3 4 5
| animals = ("cat", "dog", "bird", "fish")
print(animals[2]) print(animals[-2]) print(animals[1:3])
|
不可变性说明
元组的元素一旦创建就无法修改,试图修改会报错:
1 2
| tup = (1, 2, 3) tup[0] = 10
|
注意:如果元组中包含可变元素(如列表),则该元素内部可以修改:
1 2 3
| mutable_in_tuple = (1, [2, 3], 4) mutable_in_tuple[1][0] = 20 print(mutable_in_tuple)
|
元组的常用操作
虽然元组不可变,但支持以下操作:
len(tuple)
:获取长度。
tuple.count(x)
:统计元素 x
出现的次数。
tuple.index(x)
:返回元素 x
第一次出现的索引。
- 元组拼接(创建新元组,原元组不变)。
1 2 3 4 5 6 7 8 9
| t1 = (1, 2, 3) t2 = (4, 5)
print(len(t1)) print(t1.count(2)) print(t1.index(3))
t3 = t1 + t2 print(t3)
|
列表与元组的核心区别
特性 |
列表(List) |
元组(Tuple) |
定义符号 |
方括号 [] |
小括号 () (可省略) |
可变性 |
可变(可修改、添加、删除元素) |
不可变(元素创建后无法修改) |
性能 |
略低(需维护可变结构) |
更高(内存占用少,访问速度快) |
适用场景 |
元素需动态修改(如数据收集) |
元素固定不变(如配置、常量) |
哈希性 |
不可哈希(不能作为字典的键) |
可哈希(可作为字典的键) |
如何选择:列表还是元组?
- 用列表:当需要添加、删除或修改元素时(如动态收集用户输入、存储可变更的数据集)。
- 用元组:当数据一旦创建就不需要修改时(如存储配置项、函数返回多个值、作为字典的键)。
示例:函数返回多个值(本质是返回元组)
1 2 3 4 5 6 7 8 9
| def get_user_info(): name = "Alice" age = 30 return name, age
user = get_user_info() print(user) name, age = user print(name, age)
|
v1.3.10