ZetCode

Python 列表函数

上次修改时间:2025 年 4 月 11 日

本综合指南探讨 Python 的 list 函数,该函数创建可变序列对象。我们将介绍列表的创建、转换和实际操作示例。

基本定义

list 函数构造一个新的列表对象。它可以创建空列表或将其他可迭代对象转换为列表。列表是有序的、可变的集合,允许重复的元素。

主要特征:方括号语法、从零开始的索引、可变长度、异构元素以及许多用于操作的内置方法。

创建空列表

list 最简单的用法是创建一个空列表。此示例显示初始化空列表和预填充列表的不同方法。

empty_lists.py
# Empty list creation
empty1 = list()
empty2 = []

print(empty1)  # []
print(empty2)  # []
print(type(empty1))  # <class 'list'>

# Pre-populated list
numbers = list([1, 2, 3])
print(numbers)  # [1, 2, 3]

此示例演示了创建空列表的两种方法。对于空列表,list() 构造函数和方括号 [] 是等效的。

类型检查确认我们正在使用列表对象。最后一个例子展示了如何创建一个带有初始值的列表。

转换其他可迭代对象

list 可以将各种可迭代类型转换为列表。此示例显示了从元组、字符串、范围和字典的转换。

conversions.py
# From tuple
tup = (1, 2, 3)
lst1 = list(tup)
print(lst1)  # [1, 2, 3]

# From string
s = "hello"
lst2 = list(s)
print(lst2)  # ['h', 'e', 'l', 'l', 'o']

# From range
r = range(5)
lst3 = list(r)
print(lst3)  # [0, 1, 2, 3, 4]

# From dictionary (keys)
d = {'a': 1, 'b': 2}
lst4 = list(d)
print(lst4)  # ['a', 'b']

list 构造函数接受任何可迭代对象。对于字典,默认情况下它使用键。字符串被拆分为单个字符。

当您需要其他序列的可变版本或想要保留迭代结果时,这非常有用。

列表推导式与 list

list 与生成器表达式结合使用可以创建强大的单行代码。此示例演示了过滤和转换数据。

comprehension.py
numbers = range(10)

# Even numbers squared
evens_squared = list(x**2 for x in numbers if x % 2 == 0)
print(evens_squared)  # [0, 4, 16, 36, 64]

# Convert temperatures
fahrenheit = [32, 68, 104]
celsius = list((f - 32) * 5/9 for f in fahrenheit)
print(celsius)  # [0.0, 20.0, 40.0]

第一个例子过滤偶数并对其进行平方。第二个例子将华氏温度转换为摄氏温度。两者都在 list() 内部使用生成器表达式。

这种模式具有内存效率,因为它一次处理一项,而无需创建中间列表。

嵌套列表和矩阵

列表可以包含其他列表,从而实现矩阵结构。此示例显示了嵌套列表的创建和访问。

matrices.py
# 3x3 matrix
matrix = list([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

print(matrix[1][2])  # 6 (second row, third column)

# Flatten matrix
flat = list(num for row in matrix for num in row)
print(flat)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

# Transpose matrix
transposed = list(list(row) for row in zip(*matrix))
print(transposed)  # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

矩阵示例显示了嵌套列表的创建。我们使用双重索引访问元素。扁平化示例使用嵌套生成器表达式。

转置使用 zip 与解包来交换行和列,展示了高级列表操作。

复制列表

此示例探讨了复制列表的不同方式及其含义。理解这些差异可以防止意外行为。

copying.py
original = [1, [2, 3], 4]

# Shallow copy
shallow = list(original)
shallow[1][0] = 'changed'

# Deep copy
import copy
deep = copy.deepcopy(original)
deep[1][0] = 'unchanged'

print(original)  # [1, ['changed', 3], 4]
print(shallow)   # [1, ['changed', 3], 4]
print(deep)      # [1, ['unchanged', 3], 4]

list 构造函数创建浅拷贝。嵌套对象在原始对象和副本之间共享。深拷贝创建完全独立的副本。

这演示了何时使用每种方法。浅拷贝速度更快,但深拷贝对于嵌套结构更安全。

最佳实践

资料来源

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。到目前为止,我已经撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出所有 Python 教程