Python 3.6中sum(iterable, [])扁平化嵌套列表的原理探究
关于用
sum()扁平化嵌套列表的原理拆解 这招确实挺巧妙的!我来一步步给你讲清楚背后的逻辑:
先搞懂sum()函数的本质
sum(iterable, start)的核心逻辑非常简单:它会从初始值start开始,依次把可迭代对象里的每一个元素和当前的累加结果做「加法」操作,最后返回最终的累加值。
再看列表的「加法」特性
在Python里,列表之间的+运算符不是把元素数值相加,而是做列表拼接。举个例子:
[1, 2] + [3, 4] # 结果是 [1, 2, 3, 4],而不是 [4, 6]
代入你的例子拆解流程
当你执行sum(a, [])(其中a = [[1, 2], [3, 4], [5, 6]])时,整个过程就像手动一步步拼接列表:
- 第一步:初始累加值是
[],和第一个元素[1,2]拼接 →[] + [1,2] = [1,2] - 第二步:用上面的结果和第二个元素
[3,4]拼接 →[1,2] + [3,4] = [1,2,3,4] - 第三步:再用结果和第三个元素
[5,6]拼接 →[1,2,3,4] + [5,6] = [1,2,3,4,5,6]
本质上就是把sum()当成了一个循环拼接列表的工具,利用列表加法的特性完成了两层嵌套列表的扁平化。
额外提醒
- 这种方法只适用于两层嵌套的列表,如果是更深的嵌套(比如
[[[1,2], 3], 4]),sum()只会拼接外层的列表,内层的嵌套不会被展开。 - 从效率角度来说,这种方法并不推荐用于大数据量的场景:因为每次列表拼接都会创建新的列表对象,频繁的内存开销会拖慢速度。更高效的替代方案可以用列表推导式(
[x for sublist in a for x in sublist])或者itertools.chain.from_iterable(a)。
内容的提问来源于stack exchange,提问作者RhythmInk
相关产品推荐
相关产品推荐

