如何通过Python列表推导式将嵌套列表转换为一维列表
解决嵌套列表展平为一维列表的问题
嘿,我来给你捋捋这个问题哈~你之前写的[x for x in [x for x in a]]其实只是把原列表里的每个子列表直接复制了一遍,相当于做了个浅拷贝,所以输出还是嵌套的二维列表。要得到一维的[1, 2, 1, 2],有这几种常用方法:
方法1:双层列表推导式(最直观)
这是Python里处理简单嵌套列表最常用的方式,直接通过两层循环遍历元素:
a = [[1, 2], [1, 2]] print([item for sublist in a for item in sublist])
这个推导式的逻辑和普通嵌套循环一样:先遍历外层列表的每个子列表sublist,再遍历子列表里的每个元素item,把所有item收集到新列表里,结果就是你要的一维列表。
方法2:用itertools.chain工具
如果你处理的嵌套层级固定(这里是两层),可以用标准库itertools里的chain方法来拼接子列表:
from itertools import chain a = [[1, 2], [1, 2]] # 两种写法都可以 print(list(chain(*a))) # 或者更优雅的chain.from_iterable,不需要解包 print(list(chain.from_iterable(a)))
chain(*a)会把a里的每个子列表作为独立参数传给chain,它会把这些子列表的元素依次串联起来,最后转成列表就得到了一维结果。
方法3:普通嵌套循环(适合新手理解)
如果觉得列表推导式有点绕,用普通的循环写法也能达到目的,逻辑更清晰:
a = [[1, 2], [1, 2]] flat_list = [] for sublist in a: for item in sublist: flat_list.append(item) print(flat_list)
先初始化一个空列表,然后逐个遍历子列表里的元素,把它们添加到空列表中,最终得到展平后的一维列表。
以上几种方法运行后,输出都是你期望的[1, 2, 1, 2]哦~
内容的提问来源于stack exchange,提问作者Galoperidol
相关产品推荐
相关产品推荐

