Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/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 list.append或list+;=?_Python - Fatal编程技术网

Python list.append或list+;=?

Python list.append或list+;=?,python,Python,哪个更像蟒蛇 list.append(1) 或 从: 显式比隐式好 所以:list.append(1)list.append(1)更快,因为它不创建临时列表对象。list.append(1) 更具可读性且与上下文一致,因为 list.extend(l) 它附加给定列表的所有元素,我将使用 list.append(1) 为了对称性和可读性。这是两种不同的操作,您使用+=所做的是扩展操作。以下是Python文档对此的看法: list.append(x):在列表末尾添加一项;相当于a[len(a

哪个更像蟒蛇

list.append(1)

从:

显式比隐式好

所以:
list.append(1)
list.append(1)
更快,因为它不创建临时列表对象。

list.append(1) 更具可读性且与上下文一致

,因为

list.extend(l)
它附加给定列表的所有元素,我将使用

list.append(1)

为了对称性和可读性。

这是两种不同的操作,您使用+=所做的是扩展操作。以下是Python文档对此的看法:

list.append(x):在列表末尾添加一项;相当于a[len(a):]=[x]

extend(L):通过追加给定列表中的所有项来扩展列表;相当于a[len(a):]=L


所以在+=中提供一个列表,在append中只添加一个新元素。

虽然这里的大多数人更喜欢append选项,但我个人更喜欢另一个,因为它看起来更好,尽管它可能更慢(或者可能是经过优化的)

美胜于丑

当您编写大量Python代码时,我通常不会看到这样的情况:

list.append(1)
somecollectionname.append(anotherelementname+5*10)
更像这样:

list.append(1)
somecollectionname.append(anotherelementname+5*10)
因此,至少对我来说,看到这样的情况更好:

somecollectionname += [anotherelementname+5*10]

因为很容易一眼就看出你正在添加到列表中。话虽如此,我有时会发现自己同时使用这两种形式。

如果你有一个元素,
a
,你想把它添加到你的列表
l
,然后把
a
放进它自己的列表并扩展
l
,这似乎增加了不必要的复杂性。因此,我宁愿

l.append(a)
结束

如果
a
已经是一个列表,则选择

l += a

依我看,这是一个偏好问题。另一方面,如果您要进行大量扩展,您可以通过“提升”方法查找来获得性能提升:

extend = l.extend
for sublist in bunch_of_lists:
    extend(sublist)
最后,我认为append操作在Pythonic代码中不太常用,因为append经常用于“累加器”习惯用法中,我希望有经验的Python程序员使用列表理解/etc

因此,不是:

l = []
for a in numbers:
    l.append(str(a))
你可能会看到:

l = [str(a) for a in numbers]

提防原教旨主义 你注意到你的问题中有“更像蟒蛇”这个词吗? 我认为这意味着你在问一个没什么帮助的问题

如果一个比另一个更像蟒蛇(而不是 pythonic,而另一个不是)可以说你有 在元级别上违反了Python的禅: “简单胜于复杂”也应适用于 搜索表达形式的过程 你的逻辑——一旦你找到了某种类似蟒蛇的东西, 这就够了。保持搜索简单

因此,我的答案是: 他们两个都不太像蟒蛇。
最具python风格的事情就是继续写一个好的程序。

+1-答案和解释都很好。简明扼要。谢谢。问题不是“哪一个更像pythonic?”列表对象创建不重要吗。此外,(:-)在本例中,CPython将重用空列表中的列表。@ojrac:更快的往往是更具Python风格的,因为Python开发人员倾向于优化他们鼓励的行为。问题是“哪个更具Python风格?”。“更快”一词完全脱离主题,除非这两种方法都存在严重问题,而事实并非如此。is
list+=list
not explicit?依我看,运算符是不太明确的函数名。例如,运算符不如命名函数明确:“list+=list”是什么意思?读了它,我可能会想追加,但我也可能会想你可能想在一个数值列表中添加这些值(例如,[1,2,3]+=[4,5,6]=>[5,7,9]可能有意义)。你也可能认为
[1,2]+=[3]=>[1,2,3]
你肯定是
映射(str,numbers)
?我个人一直对
extend()
append()
之间的区别感到困惑。因此,如果问题是关于某个列表
lst
而不是固定的单个元素
1
,我的答案会是:
+=
更好,因为这样我可以确定左右操作数是对等的,我们在这里讨论的是串联,而不是将整个列表添加为最后一个元素。
l = [str(a) for a in numbers]
l = map(str, numbers)