如何用一行列表推导式将嵌套列表转为一维列表?
嵌套列表转一维列表的列表推导式正确写法
单层嵌套场景
如果你的嵌套列表是单层嵌套(例如 lst = [[1,2], [3,4], [5]] 这类结构),正确的一行列表推导式需要两层循环,写法如下:
flat_lst = [item for sublist in lst for item in sublist]
该写法完全等价于你原本使用的循环+extend逻辑:
flat_lst = [] for sublist in lst: flat_lst.extend(sublist)
多层嵌套场景
如果是多层嵌套(例如 lst = [[1, [2,3]], [4, [5, [6]]]]),两层列表推导式无法完成扁平化,这时可以使用递归式列表推导式(Python 3.3及以上版本支持):
def flatten(lst): return [item for sublist in lst for item in (flatten(sublist) if isinstance(sublist, list) else [sublist])] flat_lst = flatten(lst)
注:递归推导式可读性相对较弱,若对代码可读性要求较高,更推荐使用专门的扁平化函数,但如果必须用一行推导式实现,这是可行方案。
内容的提问来源于stack exchange,提问作者Roman Toasov
相关产品推荐
相关产品推荐

