list.append或list + =?

时间:2009-05-09 17:59:10

标签: python

哪个更pythonic?

list.append(1)

list += [1]

8 个答案:

答案 0 :(得分:59)

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

答案 1 :(得分:54)

来自Zen of Python

  

明确比隐含更好。

所以:list.append(1)

答案 2 :(得分:17)

这是两个不同的操作,你正在做什么+ =是扩展操作。以下是Python文档对此的评论:

  

list.append(x):将项添加到列表的末尾;相当于[len(a):] = [x]。

     

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

所以在+ =你提供一个列表,在附加你只需添加一个新元素。

答案 3 :(得分:7)

因为还有

list.extend(l)

附加给定列表的所有元素,我会使用

list.append(1)
为了对称性和可读性而

答案 4 :(得分:6)

虽然这里的大多数人都喜欢附加选项,但我个人更喜欢另一个,因为它看起来更好,即使它可能更慢(或者可能是优化的)。

  

美丽胜过丑陋。

当你编写很多Python代码时,我通常不会看到这样的东西:

list.append(1)

更像这样:

somecollectionname.append(anotherelementname+5*10)

至少对我来说,看到它更好:

somecollectionname += [anotherelementname+5*10]

因为一眼就能轻松识别您正在添加到列表中。话虽如此,我有时会发现自己使用这两种形式。

答案 5 :(得分:4)

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

答案 6 :(得分:4)

如果您想要添加到列表a中的单个元素l,则将a放入其自己的列表并展开l似乎增加了不必要的复杂性。我更喜欢

l.append(a)

l += [a]

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

l += a

l.extend(a)

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

extend = l.extend
for sublist in bunch_of_lists:
    extend(sublist)

最后,我认为在Pythonic代码中不经常使用append操作,因为append在“累加器”习语中经常使用,我期望更有经验的Python程序员使用列表理解/等

所以而不是:

l = []
for a in numbers:
    l.append(str(a))

您可能会看到:

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

l = map(str, numbers)

答案 7 :(得分:1)

谨防原教旨主义

你有没有注意到这个术语"更多的pythonic"在你的问题? 我认为这意味着你在问一个不那么有用的问题。

如果一个人只是更多 pythonic而不是另一个(而不是 pythonic而另一个不是)可以说你有 在元级别上违反了Python的Zen: "简单比复杂更好" 也应该适用于 搜索您表达的表单的过程 你的逻辑 - 一旦你发现了pythonic, 这很好。保持搜索简单。

所以我的答案是: 它们都不是pythonic。 最狡猾的事情就是继续编写一个不错的程序。