Skip to content

Python 3 - 列表

序列是 Python 中最基本的有序集合。序列中的每个项目都有一个指定的索引,从 0 开始,代表第一个项目。

Python 提供了几种内置的序列类型,其中列表和元组是最常见的。本节重点介绍列表。

适用于序列的常见操作包括索引、切片、加法(连接)、乘法(重复)和成员测试(in、not in)。Python 还提供了内置函数,如 len()、max() 和 min(),它们适用于序列。

列表可以说是 Python 中最通用的序列类型。它们通过将逗号分隔的值(项目)括在方括号 [] 中来定义。列表的一个关键特性是它们是可变的,这意味着创建后可以更改其内容。此外,列表中的项目不需要是相同的数据类型。

创建列表:

# 字符串列表
subjects = ['Physics', 'Chemistry', 'Math']
# 整数列表
years = [1997, 2000, 2023]
# 包含不同数据类型的列表
mixed_list = ['Alice', 30, 1.68, True]
# 空列表
empty_list = []
# 使用 list() 构造函数从其他可迭代对象创建列表
name_chars = list('Python') # 结果为 ['P', 'y', 't', 'h', 'o', 'n']

像字符串一样,列表索引从 0 开始。列表支持切片、连接以及其他序列操作。

使用方括号 [] 和索引或切片来访问列表元素:

#!/usr/bin/env python3
subjects = ['Physics', 'Chemistry', 'Math', 'Biology']
numbers = [1, 2, 3, 4, 5, 6, 7]
# 访问单个元素
print(f"subjects[0]: {subjects[0]}") # Output: Physics
print(f"subjects[-1]: {subjects[-1]}") # Output: Biology
# 列表切片
print(f"numbers[1:5]: {numbers[1:5]}") # Output: [2, 3, 4, 5]
print(f"subjects[:2]: {subjects[:2]}") # Output: ['Physics', 'Chemistry']
print(f"numbers[::2]: {numbers[::2]}") # Output: [1, 3, 5, 7]

执行代码会产生:

subjects[0]: Physics
subjects[-1]: Biology
numbers[1:5]: [2, 3, 4, 5]
subjects[:2]: ['Physics', 'Chemistry']
numbers[::2]: [1, 3, 5, 7]

由于列表是可变的,你可以更改其内容。你可以通过赋值新值来更新单个元素或切片。

#!/usr/bin/env python3
data = ['physics', 'chemistry', 1997, 2000]
print(f"Original list: {data}")
# 更新单个元素
data[2] = 2001
print(f"After updating index 2: {data}")
# 更新切片
data[0:2] = ['Biology', 'Math']
print(f"After updating slice [0:2]: {data}")

你还可以使用 append()、insert() 和 extend() 等方法(稍后讨论)添加元素。

执行代码会产生:

Original list: ['physics', 'chemistry', 1997, 2000]
After updating index 2: ['physics', 'chemistry', 2001, 2000]
After updating slice [0:2]: ['Biology', 'Math', 2001, 2000]

你可以通过几种方式从列表中移除元素:

  • del 语句: 按索引删除元素或切片。
  • remove() 方法: 删除指定值的第一个出现。
  • pop() 方法: 删除并返回指定索引的元素(默认为最后一个元素)。
#!/usr/bin/env python3
items = ['apple', 'banana', 'cherry', 'banana', 'date']
print(f"Original list: {items}")
# 使用 'del' 按索引删除
del items[2] # 删除 'cherry'
print(f"After del items[2]: {items}")
# 使用 'remove()' 按值删除
items.remove('banana') # 删除第一个 'banana'
print(f"After items.remove('banana'): {items}")
# 使用 'pop()' (默认删除最后一个元素)
last_item = items.pop()
print(f"Popped item: {last_item}, List after pop(): {items}")
# 使用 'pop()' 按索引删除
first_item = items.pop(0)
print(f"Popped item: {first_item}, List after pop(0): {items}")

执行代码会产生:

Original list: ['apple', 'banana', 'cherry', 'banana', 'date']
After del items[2]: ['apple', 'banana', 'banana', 'date']
After items.remove('banana'): ['apple', 'banana', 'date']
Popped item: date, List after pop(): ['apple', 'banana']
Popped item: apple, List after pop(0): ['banana']

列表支持标准的序列操作:

操作结果描述
len([1, 2, 3])3长度
[1, 2, 3] + [4, 5, 6][1, 2, 3, 4, 5, 6]连接
['Hi!'] * 3['Hi!', 'Hi!', 'Hi!']重复
3 in [1, 2, 3]True成员测试
for x in [1, 2, 3]: print(x, end=' ')1 2 3迭代

索引和切片的工作方式与字符串完全相同。列表还可以包含其他列表,从而创建常用于表示矩阵或表格的嵌套结构。

#!/usr/bin/env python3
languages = ['C++', 'Java', 'Python', 'Go']
print(f"languages[2]: {languages[2]}") # Output: Python
print(f"languages[-1]: {languages[-1]}") # Output: Go
print(f"languages[1:]: {languages[1:]}") # Output: ['Java', 'Python', 'Go']
# 嵌套列表 (矩阵)
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
print(f"matrix[1]: {matrix[1]}") # Output: [4, 5, 6] (第二行)
print(f"matrix[1][1]: {matrix[1][1]}") # Output: 5 (第 1 行第 1 列的元素)

Python 包含几个对列表有用的内置函数:

函数描述
len(list)返回列表中项目的数量。
max(list)返回列表中值最大的项目。
min(list)返回列表中值最小的项目。
sum(list)返回列表中所有数字项目的总和。
sorted(list, reverse=False)从原始列表的项目中返回一个新的已排序列表。不修改原始列表。
list(iterable)将可迭代对象(如元组、字符串或 range)转换为列表。

列表有几个内置方法,它们会原地修改列表(除非另有说明)。

方法签名描述
list.append(item)将 item 添加到列表末尾。
list.extend(iterable)将 iterable 中的所有项目添加到列表末尾。
list.insert(index, item)将 item 插入到指定 index 处。
list.remove(value)从列表中移除 value 的第一个出现。如果未找到则引发 ValueError。
list.pop([index])移除并返回指定 index 的项目(默认为最后一个项目)。如果列表为空或索引超出范围则引发 IndexError。
list.clear()移除列表中的所有项目。
list.index(value[, start[, end]])返回 value 的第一个出现的索引。如果未找到则引发 ValueError。可选的 start 和 end 限制搜索范围。
list.count(value)返回 value 在列表中出现的次数。
list.sort(key=None, reverse=False)原地对列表的项目进行排序。key 指定一个函数来自定义排序顺序,reverse=True 表示降序排序。
list.reverse()原地反转列表的元素顺序。
list.copy()返回列表的浅拷贝。

使用示例:

#!/usr/bin/env python3
numbers = [3, 1, 4, 1, 5, 9]
print(f"Initial list: {numbers}")
numbers.append(2)
print(f"After append(2): {numbers}")
numbers.insert(0, 6) # 在开头插入 6
print(f"After insert(0, 6): {numbers}")
numbers.sort()
print(f"After sort(): {numbers}")
numbers.reverse()
print(f"After reverse(): {numbers}")
print(f"Count of 1: {numbers.count(1)}")
print(f"Index of 4: {numbers.index(4)}")
popped_item = numbers.pop(1)
print(f"Popped item at index 1: {popped_item}, List now: {numbers}")