如何采用更Pythonic的方式展开Python中的多层嵌套列表?
更Pythonic的嵌套列表展开方法
当然有啦!Python里有不少更简洁、更贴合Python风格的方法来处理这种固定层数的嵌套列表展开,给你分享几个常用的方案:
1. 列表推导式(最推荐)
这是Python处理这类问题的标准写法,一行代码搞定,逻辑和你原来的嵌套循环完全一致,但更紧凑易读:
myList = [[[1,2,3],[4,5,6]],[[2,3,4],[3,4,5]],[[4,6,7],[5,7,9]]] simpleList = [j for i in myList for j in i] print(simpleList) # 输出: [[1, 2, 3], [4, 5, 6], [2, 3, 4], [3, 4, 5], [4, 6, 7], [5, 7, 9]]
它的执行效率和嵌套循环几乎一致,但代码更简洁,完全符合Python追求的“优雅”原则。
2. 使用itertools.chain.from_iterable()
如果你需要处理大型数据集或者惰性可迭代对象,itertools里的这个方法会更高效——它采用惰性迭代的方式,不会提前把全部数据加载到内存里:
import itertools myList = [[[1,2,3],[4,5,6]],[[2,3,4],[3,4,5]],[[4,6,7],[5,7,9]]] simpleList = list(itertools.chain.from_iterable(myList)) print(simpleList) # 输出和上面一致
这个方法特别适合处理生成器、迭代器这类不希望一次性加载全部数据的场景。
3. 用sum()函数(小数据量适用)
这是个小巧的技巧,但只适合数据量不大的情况——因为每次列表相加都会创建新的列表,数据量大时效率会直线下降:
myList = [[[1,2,3],[4,5,6]],[[2,3,4],[3,4,5]],[[4,6,7],[5,7,9]]] simpleList = sum(myList, []) print(simpleList) # 输出同样符合预期
这个写法虽然短,但不推荐在生产环境的大数据场景中使用,只适合快速测试或者小数据集的临时处理。
总的来说,列表推导式是大多数情况下的最优选择,兼顾了可读性和效率;如果处理大型数据,优先考虑itertools.chain.from_iterable()。
内容的提问来源于stack exchange,提问作者Vineet
相关产品推荐
相关产品推荐

