HOWTO · Python
在 Python 中创建零的列表
本教程演示了如何在 Python 中生成一个包含零的列表。教程探讨了多种方法,例如列表推导式、乘法运算符以及使用 numpy 库。无论您是初学者还是经验丰富的程序员,本指南都提供了清晰的代码示例和说明,帮助您高效地为项目创建零列表。
本页内容
要在 Python 中创建包含 n 个零的列表,可使用 [0] * n。例如,[0] * 5 会生成一个包含五个整数零的列表。当所需长度已知且每个元素的值都相同时,这是最清晰的做法。下面的示例统一使用 n = 5,方便直接比较不同方法。
使用列表乘法创建固定长度的零列表
列表乘法会重复左侧列表中的元素。由于 [0] 包含一个整数,将它乘以 n 就会得到 n 个整数零:
n = 5
zeros = [0] * n
结果是一个新列表。计数为零时会得到 [];计数为负数时也会得到 [],因为对于非正的重复次数,Python 会将序列重复零次。在这个例子中,重复的是整数,因此可以分别重新赋值给列表中的各个位置。如果重复的是嵌套列表等可变对象,每个位置引用的都会是同一个对象;若要创建彼此独立的对象,请改用推导式。
使用列表推导式创建零列表
列表推导式会针对可迭代对象中的每个元素计算一次表达式。这里,range(n) 提供五次迭代,_ 则是一个名称,用来接收表达式不需要使用的循环值。这个带方括号的表达式称为列表推导式:
n = 5
zeros = [0 for _ in range(n)]
当每次迭代都要计算一个值,或者你希望生成规则一目了然时,可以使用这种形式。这里没有用到循环值,因此按照惯例使用 _;它在 Python 中没有特殊行为。如果每个元素需要根据迭代值进行不同计算,可以把 0 替换为依赖该值的表达式。
需要自定义逻辑来创建每个值时使用循环
如果创建每个元素需要执行多条语句、进行条件判断或完成其他操作,显式循环会很有用。每次迭代时追加一个值:
n = 5
zeros = []
for _ in range(n):
zeros.append(0)
这种方法生成的内置列表与乘法和推导式示例相同。对于重复整数这样简单的任务,前两种写法更简洁;如果循环体能让每个元素的处理过程更容易理解,就使用循环。在实际程序中,可以将 append(0) 语句替换为计算或准备每个值所需的操作。
使用 itertools.repeat() 重复零
itertools.repeat() 会反复提供同一个对象。传入要重复的值和次数;如果调用方需要列表,再将它返回的迭代器传给 list():
from itertools import repeat
n = 5
zeros = list(repeat(0, n))
当直接使用迭代器很方便,或重复值迭代器适合用于更大的操作流程时,这种方法很有用。调用 list(...) 会耗尽迭代器,并将五个值全部存入内存;因此,如果目标本来就是得到一个列表,通常使用 [0] * n 更简单。
需要数值数组时使用 NumPy
对于使用 NumPy 运算的数值处理任务,numpy.zeros(n) 会创建一个包含 n 个零值元素的 NumPy 数组。例如,安装 NumPy 后,先执行 import numpy as np,再执行 zeros = np.zeros(5),就会创建一个数组。结果是 ndarray,而不是内置 Python 列表;只有在代码的其他部分明确需要列表时,才使用 zeros.tolist() 将其转换为列表。NumPy 是额外的依赖,适合需要数组运算、形状或数据类型的场景。对于普通列表,直接使用 [0] * n 即可,无需添加依赖。
简单的固定长度列表适合用乘法;需要针对每个元素计算表达式时可用列表推导式;需要自定义步骤时可用循环;迭代器本身有用时可用 itertools.repeat();目标数据结构是数值数组时则可用 NumPy。