Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python列表附加_Python_List - Fatal编程技术网

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]
绝对清楚。这是你习惯的,我想。。。