Pythonネストリスト解析式(リスト導出式とも呼ばれる)書き方剖析と応用例
1663 ワード
# , , 。
# 。
# 。
# :for outter in inner。 , 。
# for , , 。
# : , 。
# , 。
# , 。 lv2,lv3,lv4,lv4_a
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]
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]
#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]