このメモリ技術は私に大いに役立ちます:
[ <RETURNED_VALUE>  <OUTER_LOOP1>  <INNER_LOOP2>  <INNER_LOOP3> ... <OPTIONAL_IF> ]
そして今、あなたはR eturn + O uter-loopを唯一のR ight Oと考えることができます RDER
上記を知っていると、3つのループでも包括的なリスト内の順序は簡単に見えます。
c=[111, 222, 333]
b=[11, 22, 33]
a=[1, 2, 3]
print(
  [
    (i, j, k)                            # <RETURNED_VALUE> 
    for i in a for j in b for k in c     # in order: loop1, loop2, loop3
    if i < 2 and j < 20 and k < 200      # <OPTIONAL_IF>
  ]
)
[(1, 11, 111)]
上記は単なるaであるため:
for i in a:                         # outer loop1 GOES SECOND
  for j in b:                       # inner loop2 GOES THIRD
    for k in c:                     # inner loop3 GOES FOURTH
      if i < 2 and j < 20 and k < 200:
        print((i, j, k))            # returned value GOES FIRST
1つのネストされたリスト/構造を反復する場合、技術は同じです:a質問から:
a = [[1,2],[3,4]]
[i2    for i1 in a      for i2 in i1]
which return [1, 2, 3, 4]
ネストされた別のレベル
a = [[[1, 2], [3, 4]], [[5, 6], [7, 8, 9]], [[10]]]
[i3    for i1 in a      for i2 in i1     for i3 in i2]
which return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
等々
               
              
[x for b in a for x in b]これは常にpythonに関するバグでした。この構文は非常に逆です。の一般的な形式でx for x in yは、常にforの直後に変数があり、forの左側の式にフィードされます。二重理解を行うとすぐに、最後に反復された変数が突然「遠く」になります。それは厄介だし、まったく自然に読んでいません