概况

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

  

 posted on 2024-05-17 17:04  boye169  阅读(4)  评论(0编辑  收藏  举报