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)