📜  Python“+”和“附加”之间的区别

📅  最后修改于: 2021-09-13 03:09:37             🧑  作者: Mango

在Python使用“+”运算符在列表中添加元素:使用“+”运算符会导致Python访问第一个列表的每个元素。当使用 ‘+’ 时,会创建一个新列表,其中还有一个元素的空间。然后必须将旧列表中的所有元素复制到新列表中,并将新元素添加到此列表的末尾。

例子:

sample_list =[]
n = 10
  
for i in range(n):
      
    # i refers to new element
    sample_list = sample_list+[i]
  
print(sample_list)

输出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • “+”运算符指的是访问器方法,不会修改原始列表。
  • 在这种情况下,sample_list 本身不会改变。这种在 sample_list 中添加元素的类型从两个列表中的元素创建一个新列表。
  • 将 sample_list 分配给这个新列表会更新 PythonList 对象,因此它现在引用新列表。

添加 n 个元素的复杂性

你有没有想过,随着Python列表大小的增长,它是如何工作的?让我们看看解释。

对于每一次迭代,都必须从原始列表中复制 i 个元素以形成一个新列表。考虑到从列表中访问元素所花费的时间是常数。因此,将 n 个元素附加到Python列表(即 sample_list)所需的复杂性或时间,我们必须将所有列表访问相加,然后乘以访问列表元素所需的时间加上访问列表元素所需的时间存储一个列表元素。要计算访问和存储操作的总数,我们必须从第一次附加元素时复制列表的访问和存储操作的次数开始。这是复制的一个元素。第二个追加需要两次复制操作。第三个追加需要三个复制操作。因此,我们复制了以下数量的列表元素。
1+2+3+4+5+......+n= n(n+1)/2
因此,时间复杂度=O( n^2 )

使用 .append() 方法,即一种有效的方法:列表上的 .append() 方法更改代码以使用 mutator 方法通过仅附加一个元素来更改列表。

例子:

sample_list =[]
n = 10
  
for i in range(n):
    # i refers to new element
    sample_list.append(i) 
  
print(sample_list)

输出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

事实证明,在Python向已经存在的列表中再添加一个元素是非常有效的。事实上,向列表中添加一个新项目是一个 O(1) 操作。

所以追加 n 个元素的整体复杂度是

1+.....(n-2) times...+1=O(n)

注意:证明.append()方法具有 O(1) 复杂度来添加新元素是由会计方法给出的,以找到 append 的摊销复杂度。

‘+’ 和 ‘append’ 之间的图形比较

附加和加python之间的区别