`sum`如何扁平化列表?
问题:sum如何扁平化列表? 像l=[[1,2],[3,4]]这样的多维列表可以通过sum(l,[])转换为一维列表。这是怎么发生的? (这不适用于更高的多维列表,但可以重复处理这些情况。例如,如果 A 是 3D 列表,则 sum(sum(A),[]),[] ) 将 A 展平为一维列表。) 解答 sum使用+运算符将一个序列相加。例如sum([1,2,3]) == 6。第二个参数是一个可选的起始值
问题:sum
如何扁平化列表?
像l=[[1,2],[3,4]]
这样的多维列表可以通过sum(l,[])
转换为一维列表。这是怎么发生的?
(这不适用于更高的多维列表,但可以重复处理这些情况。例如,如果 A 是 3D 列表,则 sum(sum(A),[]),[] ) 将 A 展平为一维列表。)
解答
sum
使用+
运算符将一个序列相加。例如sum([1,2,3]) == 6
。第二个参数是一个可选的起始值,默认为 0。例如sum([1,2,3], 10) == 16
.
在您的示例中,它执行[] + [1,2] + [3,4]
,其中 2 个列表上的+
将它们连接在一起。因此结果是[1,2,3,4]
空列表作为sum
的第二个参数是必需的,因为如上所述,sum
的默认值是添加到 0(即0 + [1,2] + [3,4]
),这将导致 + 的 _unsupported 操作数类型:'int' 和 'list' _
这是sum
帮助的相关部分:
sum(sequence[, start]) -> 值
返回数字序列(不是字符串)加上参数“start”的值(默认为 0)的总和。
笔记
正如wallacoloo评论的那样,这不是扁平化任何多维列表的通用解决方案。由于上述行为,它仅适用于一维列表的列表。
更新
有关扁平化 1 级嵌套的方法,请参见itertools页面中的此配方:
def flatten(listOfLists):
"Flatten one level of nesting"
return chain.from_iterable(listOfLists)
要展平更深的嵌套列表(包括不规则嵌套列表),请参阅接受的答案到这个问题(还有一些其他问题与该问题本身相关联。)
请注意,配方返回一个itertools.chain
对象(它是可迭代的),另一个问题的答案返回一个generator
对象,因此如果您想要完整列表而不是迭代它,则需要将其中任何一个包装在对list
的调用中。例如list(flatten(my_list_of_lists))
.
更多推荐
所有评论(0)