如何在 Python 中初始化列表?

2024 年 8 月 29 日 | 5 分钟阅读

Python 列表可以包含任何 Python 对象,它们以有序值的集合形式存在。由于列表是 Python 中的可变数据结构,我们可以添加、删除或修改此容器中现有的值。与集合不同,列表允许同一个值出现多次,并将每次出现都视为一个不同的项。在本教程中,我们将学习如何初始化 Python 中的列表对象。

使用方括号初始化列表

如果我们想在 Python 中创建一个不包含任何值的空列表,使用方括号是一种方法。要初始化列表,我们只需要一对不带或带项目值的方括号。

代码

输出

An empty list:  []
A non-Empty list:  [1, 3, 5, 7]

使用内置的 list() 函数初始化列表

Python 的 list() 函数用于构造列表,这是一个可迭代对象。因此,这是在不包含任何数据的情况下创建空 Python 列表的另一种方法。

可迭代对象可以是迭代器对象、允许迭代的序列或容器。如果未提供任何输入,则会构造一个新空列表。

代码

输出

An empty list:  []
A non-empty list:  [1, 2, 3]

与内置的 list() 函数相比,方括号方法更清晰、更具说明性,因此更受青睐。

使用列表推导式初始化列表

我们可以采用列表推导式的方法来设置列表的默认参数。它包含一个包含在方括号中的表达式,一个 for 语句,以及一个可选的 if 语句,该语句后面可以跟随或不跟随。我们可以将任何我们想要添加到列表中的项写成一个表达式。如果用户用零初始化列表,表达式将是 0。

列表推导式是一种优雅、简单且众所周知的方法,用于基于迭代器构建列表。

代码

输出

The list was created using list comprehension:  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

这种技术初始化列表的速度比 Python 的 for 和 while 循环快得多。

使用 * 运算符初始化 Python 列表

在 Python 中初始化列表的另一种方法是使用 * 运算符。它创建一个包含多个值的列表。使用此运算符的语法是 `[element] * n`。这里的 `n` 是我们希望元素在列表中重复的次数。

当我们希望初始化具有预定义长度的列表时,此方法非常有用。

代码

输出

[5, 5, 5, 5, 5, 5, 5, 5, 5]

这种方法非常高效,是创建列表的最快方法。我们将在本教程的后面比较这些方法的耗时。

使用此运算符初始化 Python 列表的唯一缺点是,当我们必须创建二维列表时,因为此方法只会创建一个浅列表,即它会创建一个单一的列表对象,并且所有索引都将指向此对象,这将非常不方便。这就是为什么我们在创建二维列表时使用列表推导式。

使用 for 循环和 append()

我们将创建一个空列表,然后运行一个 for 循环,使用列表的 append() 函数添加项。

代码

使用 while 循环初始化列表

我们可以像使用 for 循环一样使用 while 循环来初始化列表。

代码

输出

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

时间复杂度

现在让我们看看上面描述的每种方法的耗时。我们将初始化一个包含 100000 个元素的列表 1000 次。我们将计算每种方法执行此任务的平均时间。

代码

输出

The average execution time of for loop is:  0.01166958212852478
The average execution time of the while loop is:  0.01916465663909912
The average execution time of list comprehension is:  0.005084690093994141
The average execution time was taken of * operator:  0.00028331947326660156    

我们可以看到 for 和 while 循环的执行时间几乎相同。然而,for 循环比 while 循环稍微好一些。

与 for 和 while 循环相比,列表推导式显示出更好的性能。它比循环快 2-3 倍。因此,列表推导式比列表的 append() 函数效率高得多。

在所有四种方法中,* 运算符显示出最佳性能。