如何理解Python列表推导式实现2D数组转1D数组的工作原理
嵌套列表推导式展平二维数组的工作原理
这段代码没有特殊语法魔法,本质是把多层嵌套的普通for循环压缩成了单行列表推导式写法,执行逻辑和逐行写普通循环完全一致。
对应代码片段:
li = [[0,1,2],[3,4,5],[6,7,8]] li2 = [y for x in li for y in x]
执行逻辑拆解:
- 列表推导式内的
for书写顺序,完全对应普通嵌套循环从外层到内层的执行顺序,最终要收集的元素写在推导式最开头的位置 - 首先执行外层循环:
for x in li,依次遍历原二维数组的每一个子列表,x的取值依次为[0,1,2]、[3,4,5]、[6,7,8] - 对每个取到的x,执行内层循环:
for y in x,遍历当前子列表的每个元素y - 每获取一个y,就把该值直接加入最终生成的一维列表
这个推导式和下方的普通循环逻辑完全等价,可对照验证:
li2 = [] # 对应推导式里的第一个for,是外层循环 for x in li: # 对应推导式里的第二个for,是内层循环 for y in x: # 对应推导式最开头的收集元素y li2.append(y)
新手常见误区:不少人会把两个
for的顺序写反,写出类似[y for y in x for x in li]的代码触发NameError,核心原因是记错了推导式的循环规则——它的循环顺序和普通缩进写的嵌套循环层级完全一致,不会因为收集的元素写在最前面就颠倒循环执行顺序。
内容的提问来源于stack exchange,提问作者new user
相关产品推荐
相关产品推荐

