概况
- 嵌套列表解析式又称嵌套列表推导式,功能非常强大,但是初学者难以摸清其书写规则。
- 以下实例展示了嵌套列表解析的写法。
- 嵌套列表解析表达是的书写规则是层层嵌套。
- 嵌套层的一般形式为:for outter in inner。根据需要解析的嵌套层次深度,此一般形式可以从左到右接续写若干个。
- 嵌套层是从最左边的for开始,从左往右,层次由深层到浅层。
- 前提条件:所有从叶结点的到根节点被筛选出来的对象,必须具有可迭代性。
- 所谓的叶结点,就是具有最终具体值的非列表性数据的结点。
- 所谓的根节点,就是最顶层的具有嵌套子结构的结点。例如下例中的lv2,lv3,lv4,lv4_a
2层嵌套
1 2 3 4 5 | lv2 = [ range ( 10 ), range ( 10 , 20 )] #lv2表示嵌套层级为2的列表 print ([e for lv1 in lv2 for e in lv1]) #输出结果为:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] print ([e for lv1 in lv2 for e in lv1 if e % 2 = = 0 ]) #输出结果为:[0, 2, 4, 6, 8, 10, 12, 14, 16, 18] |
3层嵌套
1 2 3 | lv3 = [[ range ( 10 ), range ( 10 , 20 )],[ range ( 20 , 30 ), range ( 30 , 40 )]] #lv3表示嵌套层级为3的列表 print ([e for lv2 in lv3 for lv1 in lv2 for e in lv1 if e % 3 = = 0 ]) #输出结果为:[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39] |
4层嵌套
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #lv4表示嵌套层级为4的列表 lv4 = [ [ [ [ 1 , 2 ],[ 3 , 4 , 5 ] ],[[ 6 , 7 , 8 , 9 ],[ 10 , 11 , 12 , 13 , 14 ] ] ],[ [ [ 15 , 16 , 17 , 18 , 19 ],[ 20 , 21 , 22 , 23 ] ],[ [ 24 , 25 , 26 ],[ 27 ] ] ] ] print ([e for lv3 in lv4 for lv2 in lv3 for lv1 in lv2 for e in lv1 if e % 2 = = 1 ]) #输出结果为:[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27] #lv4_a表示最大嵌套层级为4的列表,但是存在嵌套层级为3的叶结点。 #通过在嵌套的列表解析式中引入了条件 #此例的2个输出语句分别实现了如下功能: # (1)得到了第4层级上叶节点的数值。(不要输出第3层级上的叶结点)。 # (2)得到了第3层级上叶节点的数值。(不要输出第4层级上的叶结点)。 lv4_a = [ [ [ 11 , [ 1 , 2 ],[ 3 , 4 , 5 ] ],[[ 6 , 7 , 8 , 9 ], 22 ,[ 10 , 11 , 12 , 13 , 14 ] ] ],[ [ [ 15 , 16 , 17 , 18 , 19 ], 33 ,[ 20 , 21 , 22 , 23 ] ],[ [ 24 , 25 , 26 ], 44 ,[ 27 ] ] ] ] print ([e for lv3 in lv4_a for lv2 in lv3 for lv1 in lv2 if isinstance (lv1, list ) = = True for e in lv1]) #输出结果为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27] print ([e for lv2 in lv4_a for lv1 in lv2 for e in lv1 if not isinstance (e, list )]) #输出结果为:[11, 22, 33, 44] |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)