python sum高级用法

之前python里面sum的理解不太到位,今天看到了一个碾平list的answer. 看完才明白,sum还可以加数组,加字符串。
碾平list的代码是这样的。

s = [1,[2,[3,4]]]
flat = lambda L: sum(map(flat, L), []) if isinstance(L, list) else [L]
res = flat(s)
print(res)
a = [1,2,[3,4],[[5,6],[7,8, [1,[3,4,[5]]]]]]
flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) is list else [x]
print(flatten(a))

普通的递归写法是这样的:

res = []
def fun(s):
	for i in s:
		if isinstance(i, list):
			fun(i)
		else:
			res.append(i)
fun(s)
print(res) 

这个题并不是sum的重点,重点是最上面的第一种写法。sum(map(flat, L), [])
这段代码是什么意思?
sum(sequence[,start]) sum函数可以带初始值,如果是空列表,就可以进行列表合并,但是,前面的必须得是列表嵌套列表的样式才行。

>>> a = [[1],[2,3],[4,5,6]]
>>> sum(a, [])
[1, 2, 3, 4, 5, 6]

这样的话,就很容易看明白上面的lambda函数是如果实现的了。

参考:

https://blog.csdn.net/Jerry_1126/article/details/79937454

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值