Python的sum()将字符串列表添加到一起。有什么用吗?

2024-04-19 05:45:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我偶然发现了一个奇怪的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()添加对象的能力还有其他用途吗?在


Tags: import列表ascii情况upperlowerbuglist
2条回答
sum([['a'], ['b']], [])

这里sum只做它设计的任务。只需在其输入上使用加法运算符。在本例中,输入是两个列表,列表中恰好定义了__add__方法。在

^{pr2}$

您看到的性能影响是因为创建了中间列表。当您执行[] + ['a']操作时,会创建一个新列表,其中只有'a'。当您将'b'添加到其中时,将创建另一个列表。在


除此之外,doc还推荐了^{}的替代品

For some use cases, there are good alternatives to sum(). The preferred, fast way to concatenate a sequence of strings is by calling ''.join(sequence). To add floating point values with extended precision, see math.fsum(). To concatenate a series of iterables, consider using itertools.chain().

在您的例子中,您尝试连接一系列iterable,首选的方法是使用itertools.chain()。在

顾名思义,sum是用来汇总元素的,通常是整数的列表。它不仅适用于列表,还可以向其传递迭代器。在

相关问题 更多 >