Python中+和append的区别
在 Python 中使用“+”运算符在列表中添加元素:使用“+”运算符会导致 Python 访问第一个列表的每个元素。当使用“+”时,会创建一个新列表,其中包含一个更多元素的空间。然后必须将旧列表中的所有元素复制到新列表中,并将新元素添加到此列表的末尾。
例子:
运行结果:
解释说明:
+
操作符引用访问器方法并且不修改原始列表。- 在这种情况下,
sample_list
不会改变自己。这种在sample_list
中添加元素的方式会根据两个列表中的元素创建一个新列表。 - 将 sample_list 分配给这个新列表会更新 PythonList 对象,因此它现在引用新列表。
- 添加 n 个元素的复杂度
你有没有想过,随着 Python 列表大小的增长,它是如何工作的?下面来看看解释。
对于每次第 i 次迭代,都必须从原始列表中复制 i 个元素以形成一个新列表。考虑到从列表中访问元素所花费的时间是恒定的。因此,将 n 个元素附加到 Python 列表(即 sample_list)所需的复杂性或时间量,我们必须将所有列表访问相加,并乘以访问列表元素所需的时间加上访问列表所需的时间存储一个列表元素。要计算访问和存储操作的总数,我们必须从第一次添加元素时复制列表的访问和存储操作的数量开始。这是复制的一个元素。第二个追加需要两次复制操作。第三个追加需要三个复制操作。因此,我们复制了以下数量的列表元素。
使用 .append()
方法,即一种有效的方法:列表上的 .append()
方法将代码更改为使用 mutator 方法通过仅追加一个元素来更改列表。
例子:
运行结果:
事实证明,在已经存在的列表中再添加一个元素在 Python 中非常有效。实际上,向列表中添加新项目是 O(1) 操作。
所以附加 n
个元素的总体复杂度是
注意:证明
.append()
方法具有 O(1) 添加新元素的复杂度由会计方法给出,以找到附加的摊销复杂度。
‘+’和‘append’之间的图形性能比较: