概况
- 嵌套列表解析式又称嵌套列表推导式,功能非常强大,但是初学者难以摸清其书写规则。
- 以下实例展示了嵌套列表解析的写法。
- 嵌套列表解析表达是的书写规则是层层嵌套。
- 嵌套层的一般形式为:for outter in inner。根据需要解析的嵌套层次深度,此一般形式可以从左到右接续写若干个。
- 嵌套层是从最左边的for开始,从左往右,层次由深层到浅层。
- 前提条件:所有从叶结点的到根节点被筛选出来的对象,必须具有可迭代性。
- 所谓的叶结点,就是具有最终具体值的非列表性数据的结点。
- 所谓的根节点,就是最顶层的具有嵌套子结构的结点。例如下例中的lv2,lv3,lv4,lv4_a
2层嵌套
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层嵌套
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层嵌套
#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]
标签:lv4,lv1,推导,lv2,Python,列表,嵌套,10 From: https://www.cnblogs.com/boye169/p/18198113