什么是列表方法之间的差异append()和extend()?
我已经看到实际上有两种(可能更多)方法在Python中连接列表:一种方法是使用extend()方法:
a = [1, 2]
b = [2, 3]
b.extend(a)
Run Code Online (Sandbox Code Playgroud)
另一个使用加号(+)运算符:
b += a
Run Code Online (Sandbox Code Playgroud)
现在我想知道:这两个选项中的哪一个是"pythonic"方式进行列表连接,两者之间是否存在差异(我查阅了官方Python教程但未找到任何关于此主题的内容).
为什么这两个操作(append()分别+)给出不同的结果?
>>> c = [1, 2, 3]
>>> c
[1, 2, 3]
>>> c += c
>>> c
[1, 2, 3, 1, 2, 3]
>>> c = [1, 2, 3]
>>> c.append(c)
>>> c
[1, 2, 3, [...]]
>>>
Run Code Online (Sandbox Code Playgroud)
在最后一种情况下,实际上存在无限递归.c[-1]并且c是一样的.为什么它与+操作不同?
附加到列表可能有两种方式:
1)
mat = []
for i in range(10):
mat.append(i)
Run Code Online (Sandbox Code Playgroud)
要么
2)
mat = []
for i in range(10):
mat += [i]
Run Code Online (Sandbox Code Playgroud)
示例中显示的方法append()是为列表对象定义的; 它在列表的末尾添加了一个新元素.在此示例中,它等效于result = result + [a],但效率更高.
文档表明方法1更有效.为什么会这样?
我是一个Python新手.我有一系列对象需要插入列表的特定索引,但它们不按顺序排列,所以我不能只是追加它们.如何在必要时增加列表以避免IndexErrors?
def set(index, item):
if len(nodes) <= index:
# Grow list to index+1
nodes[index] = item
Run Code Online (Sandbox Code Playgroud)
我知道你可以创建一个具有初始容量的列表,nodes = (index+1) * [None]但通常的方法是将它扩展到什么位置?以下似乎效率不高:
for _ in xrange(len(nodes), index+1):
nodes.append(None)
Run Code Online (Sandbox Code Playgroud)
另外,我想标准库中可能有一个类我应该使用而不是内置列表?
我是python的新手,我只是尝试了一些列表操作.我有三个清单
A = [10,20,30,40,50,60]
B = [22,44,66,88,12,10]
C = [2,4,6,8,10,20]
Run Code Online (Sandbox Code Playgroud)
我想迭代这三个列表,并且CI的每个值都希望将该值的一半添加到A和B的相应值.例如,对于第一次迭代 - 一半= 2/2 = 1所以A = 10 + 1并且B = 22 + 1所以最终的列表看起来应该是这样的
A = [11,22,33,44,55,70]
B = [23,46,69,92,17,20]
C = [2,4,6,8,10,20]
Run Code Online (Sandbox Code Playgroud) 在Python中,我最近注意到您可以通过两种方式追加列表项:
a.append(1)
a += [1]
Run Code Online (Sandbox Code Playgroud)
我喜欢使用第二种方法,因为它对我来说更具可读性.使用它有什么缺点吗?
将较长的语句附加到列表时,我觉得append阅读起来很尴尬.我想要一个适用于动态列表创建的方法(即不需要先用零初始化等等),但我似乎无法想出另一种方法来做我想做的事情.
例:
import math
mylist = list()
phi = [1,2,3,4] # lets pretend this is of unknown/varying lengths
i, num, radius = 0, 4, 6
while i < num:
mylist.append(2*math.pi*radius*math.cos(phi[i]))
i = i + 1
Run Code Online (Sandbox Code Playgroud)
虽然append工作得很好,但我觉得它不太清楚:
mylist[i] = 2*math.pi*radius*math.cos(phi[i])
Run Code Online (Sandbox Code Playgroud)
但是这不起作用,因为该元素在列表中不存在,产生:
IndexError: list assignment index out of range
Run Code Online (Sandbox Code Playgroud)
我可以将结果值分配给临时变量,并追加它,但这看起来很丑陋且效率低下.
L = [1,2,3,4]
L.append(13) # (1)
L = L + [13] # (2)
Run Code Online (Sandbox Code Playgroud)
上述陈述有何不同?