哪个更pythonic?
list.append(1)
或
list += [1]
答案 0 :(得分:59)
list.append(1)
更快,因为它不会创建临时列表对象。
答案 1 :(得分:54)
答案 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。 最狡猾的事情就是继续编写一个不错的程序。