我偶然发现了一个奇怪的Python习语(无论如何,在我看来),肯定是一个bug。但后来它跑了。在
>>> sum([['a'], ['b']], [])
['a', 'b']
基本上与
^{pr2}$sum()的默认值是0,但它允许您指定不同的默认值,在这种情况下,它必须是另一个列表(空或其他)。在
这真是一种复杂的说法
>>> ['a'] + ['b']
['a', 'b']
更简单易读。在
那么有没有表现上的差异呢?在
>>> import timeit
>>> from string import ascii_lowercase, ascii_uppercase
>>> lower = list(ascii_lowercase)
>>> upper = list(ascii_uppercase)
>>> timeit.timeit('lower + upper', globals=globals())
0.3070615209871903
>>> timeit.timeit('sum([lower, upper], [])', globals=globals())
0.7599097189959139
是的,但不是很好,所以没什么好推荐的。在
sum()添加对象的能力还有其他用途吗?在
这里
^{pr2}$sum
只做它设计的任务。只需在其输入上使用加法运算符。在本例中,输入是两个列表,列表中恰好定义了__add__
方法。在您看到的性能影响是因为创建了中间列表。当您执行
[] + ['a']
操作时,会创建一个新列表,其中只有'a'
。当您将'b'
添加到其中时,将创建另一个列表。在除此之外,doc还推荐了^{} 的替代品
在您的例子中,您尝试连接一系列iterable,首选的方法是使用
itertools.chain()
。在顾名思义,sum是用来汇总元素的,通常是整数的列表。它不仅适用于列表,还可以向其传递迭代器。在
相关问题 更多 >
编程相关推荐