Python中如何实现类似JS展开运算符的列表解包以扁平化map返回结果
Python列表解包及扁平化场景解答
Python有对应JavaScript展开运算符的序列解包语法,使用*操作符即可实现,比如[*['a', 'b'], *['c']]会直接得到一维列表['a', 'b', 'c'],和JS的展开运算符效果一致。
针对你的场景,无法仅在lambda内部完成解包来直接得到一维列表:因为map的执行逻辑是1个输入元素对应1个输出结果,lambda无论怎么编写都只能返回单个值(你这里返回的就是split后的子列表),无法直接向map的结果容器里插入多个元素。
你可以配合内置方法实现需求,不需要单独定义扁平化函数,也无需使用列表推导式,有两种常用实现方案:
方案1:使用内置sum函数(无需导入依赖)
利用sum的累加特性,指定初始值为空列表即可完成子列表拼接:
data = ['oh my god','that is','super duper'] result = sum(map(lambda i: i.split(), data), []) print(result) # 输出:['oh', 'my', 'god', 'that', 'is', 'super', 'duper']
该方案适合小规模列表使用,写法最简洁。
方案2:使用itertools.chain.from_iterable(性能更优)
处理大规模列表时更推荐该方案,时间复杂度比sum更低:
from itertools import chain data = ['oh my god','that is','super duper'] result = list(chain.from_iterable(map(lambda i: i.split(), data))) print(result) # 输出同上
内容的提问来源于stack exchange,提问作者somniumm
相关产品推荐
相关产品推荐

