Python列表附加
可能重复:Python列表附加,python,list,Python,List,可能重复: 在Python中,我最近注意到可以通过两种方式附加列表项: a.append(1) a += [1] 我喜欢使用第二种方法,因为它对我来说更具可读性。使用它有什么缺点吗?查看有趣的结果。简短版本:追加更快。查看有趣的结果。简短版本:append更快。这两种方法并不完全相同。+=方法: a += [1] 要求您首先创建一个包含单个元素1的新列表,将其固定在列表a上,然后丢弃单个元素列表。这将更等同于: a.extend([1]) 您可能会发现a.append(1)做的工作更少,
在Python中,我最近注意到可以通过两种方式附加列表项:
a.append(1)
a += [1]
我喜欢使用第二种方法,因为它对我来说更具可读性。使用它有什么缺点吗?查看有趣的结果。简短版本:追加更快。查看有趣的结果。简短版本:append更快。这两种方法并不完全相同。
+=
方法:
a += [1]
要求您首先创建一个包含单个元素1
的新列表,将其固定在列表a
上,然后丢弃单个元素列表。这将更等同于:
a.extend([1])
您可能会发现
a.append(1)
做的工作更少,因为它不需要创建下一步将要丢弃的单个元素列表。这两种方法并不完全相同。+=
方法:
a += [1]
要求您首先创建一个包含单个元素1
的新列表,将其固定在列表a
上,然后丢弃单个元素列表。这将更等同于:
a.extend([1])
您可能会发现
a.append(1)
做的工作更少,因为它不需要创建下一步将要丢弃的单个元素列表。这取决于Python实现,但是append
永远不会比第二个变体慢
a+=[1]
创建一个包含一个元素的临时列表。此外,+=
操作符必须执行一些额外的工作来确定新列表的大小。一个好的Python实现可以通过不在内存中实际构造列表[1]
来减少开销
与几乎所有性能问题一样,除非您的代码确实对性能至关重要,否则这并不重要。使用cpython 2.7,我测量了以下值:
>>> import timeit
>>> timeit.timeit('l = []\nfor i in range(200):\n\tl.append(1)\n')
27.95561385154724
>>> timeit.timeit('l = []\nfor i in range(200):\n\tl += [1]\n')
37.52841401100159
它取决于Python实现,但是
append
永远不会比第二个变体慢
a+=[1]
创建一个包含一个元素的临时列表。此外,+=
操作符必须执行一些额外的工作来确定新列表的大小。一个好的Python实现可以通过不在内存中实际构造列表[1]
来减少开销
与几乎所有性能问题一样,除非您的代码确实对性能至关重要,否则这并不重要。使用cpython 2.7,我测量了以下值:
>>> import timeit
>>> timeit.timeit('l = []\nfor i in range(200):\n\tl.append(1)\n')
27.95561385154724
>>> timeit.timeit('l = []\nfor i in range(200):\n\tl += [1]\n')
37.52841401100159
我不知道该搜索什么,谢谢。你能把我的问题标记为重复的吗?我不知道要搜索什么,谢谢。你能把我的问题标记为重复的吗?我认为第二个问题更容易出错。您正在添加编号
1
还是列表[1]
.append()
和.extend()
使此区分清晰,同时也不需要令人困惑的额外括号。AFAICT,括号表示法与a.extend([1])
相同,其作用与a.append(1)
类似。唯一的缺点是第二种方法的速度是原来的两倍,但是.append()
和.extend()
更容易混淆。我个人认为+=[1]
绝对清楚。我猜,这是你习惯的,我想第二种更容易出错。您正在添加编号1
还是列表[1]
.append()
和.extend()
使此区分清晰,同时也不需要令人困惑的额外括号。AFAICT,括号表示法与a.extend([1])
相同,其作用与a.append(1)
类似。唯一的缺点是第二种方法的速度是原来的两倍,但是.append()
和.extend()
更容易混淆。我个人认为+=[1]
绝对清楚。这是你习惯的,我想。。。