【发布时间】:2017-11-30 06:09:21
【问题描述】:
Following 可用于添加切片以追加到列表的前面。
>>> a = [5,6]
>>> a[0:0] = [1,2,3]
>>> a
[1,2,3,5,6]
用来追加到列表末尾的切片。
【问题讨论】:
-
用切片替换
list方法的例子是given in the tutorial for many methods。
Following 可用于添加切片以追加到列表的前面。
>>> a = [5,6]
>>> a[0:0] = [1,2,3]
>>> a
[1,2,3,5,6]
用来追加到列表末尾的切片。
【问题讨论】:
list方法的例子是given in the tutorial for many methods。
如果真的要使用slice,可以使用a的长度:
a = [5, 6]
a[len(a):] = [1, 2, 3]
a
[5, 6, 1, 2, 3]
不过最简单的还是直接扩展a:
a = [5, 6]
a += [1, 2, 3] # or a.extend([1, 2, 3])
【讨论】:
+= 基本上保证更快(切片操作涉及临时的list 对象,以及非常昂贵的len 调用)。 += 更具可读性,并且是可用的最快选项。
extend() 可能会更好。 stackoverflow.com/a/24261311/499581
nonlocal 和 += 将起作用。它仍然无法工作的情况包括当有问题的list 是tuple 的一部分时; mytuple = ([], []); mytuple[0] += [1,2,3] 是一个错误,而调用 extend 很好(因为它不会尝试重新分配 mytuple[0])。
我觉得你应该考虑extend():
>>> a = [1, 2, 3]
>>> a.extend([4, 5, 6])
>>> a
[1, 2, 3, 4, 5, 6]
+和+=运算符都是为列表定义的,它们在语义上是 类似于扩展。
list + list2在内存中创建第三个列表,因此您可以返回 它的结果,但它要求第二个迭代是一个列表。
list += list2就地修改列表(就是就地操作符, 和列表是可变对象,正如我们已经看到的)所以它不会创建一个 新名单。它也像扩展一样工作,因为第二个可迭代可以 可以是任何类型的可迭代对象。
时间复杂度
O(1)。O(k)。遍历多次调用 append 增加了复杂性, 使其等同于扩展,并且由于扩展的迭代 是用 C 实现的,如果你打算追加它总是会更快 从一个可迭代的连续项目到一个列表。
【讨论】:
>>> a = [1, 2, 3]
>>> a[len(a):] = [4, 5, 6]
>>> a
[1, 2, 3, 4, 5, 6]
或
>>> a = [1, 2, 3]
>>> a += [4, 5, 6]
>>> a
[1, 2, 3, 4, 5, 6]
【讨论】:
你从 Jeevaa 和 Reblochon Masque 那里得到了简短的回答,但如果你想使用 for 循环,那么试试这个:
a = [5,6]
b = [1,2,3]
for val in b[::-1]:#Reverse b and insert it to a
a.insert(0,val)
print(a)
输出
[1,2,3,5,6]
【讨论】: