pythonはforを使用します。elseは二重ネストサイクルから飛び出す方法の例です。


背景
週末に爬虫類を書く時、検索結果から指定数のファイルをダウンロードする場面があります。
例えば、検索結果は10ページに分かれて展示されています。合計50件のデータは50件のデータから指定数のデータをダウンロードします。
この機能を実現するために、最初はこう思っていました。
1、10ページのデータを順次巡回し、各ページのデータを同じリストに追加すると、10ページのデータを要求した後、このリストにはすべての結果が含まれています。
2、この大リストから指定数のデータを抽出してダウンロードすればいいです。
この方法は確かに実行可能ですが、実行中に問題があります。プログラムの運行速度が遅すぎます。理由はいくらデータをダウンロードしたいとしても、先にすべてのデータを要求してリストに追加します。このプロセスは本当に時間がかかりすぎて、しかも合理的ではありません。
n本のデータをダウンロードするには、n本だけを抽出して、すべてのデータを事前に要求しないという考え方に変えます。
具体的な実現方法
上に挙げた例は、以下のような機能として抽象化できます。
最初にネストされたリストがあります。

[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]]
そして、このリストのデータを新しいリストに抽出します。例えば、前の3つの数字、前の5つの数字、または前の8つの数字を取ります。
二層for循環により実現できます。また、設定条件に注意してサイクルを飛び出すことができます。

source = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]]
target = []

def get_data(source, count):
 for i in range(0, len(source)+1):
  temp = source[i]
  for j in temp:
   target.append(j)
   if len(target) >= count:
    break

  else:
   continue
  break

t = get_data(source, 6)
print(target)
sourceは元のリストを表します。countは抽出した数字の個数を表します。
菜鳥教程の提示によると、for…elseの意味は以下の通りです。
1、forの中の文は普通のものと違いません。elseの中の文はサイクルが正常に実行され終わった場合に実行されます。
2、forがbreakで中断された場合、else文は実行されません。
countが異なる値の場合の運転手順と結果を分析します。
 1、count=3
count=3の場合、次のような結果が得られます。

target = [1, 2, 3]
sourceには4つのサブリストが含まれています。各サブリストには5つの数字が含まれています。
まず外層forサイクルを巡回して、第一のサブリストを巡回すると、内部層forサイクル中断の条件を満たすことができます。すなわち、第一のサブリストの数字3が抽出されると、targetの長さは3に等しくなり、len(target)==countを満たし、内側の階層forサイクルから飛び出します。
この時点では正常に内部層forサイクルを終了していないので、後のelse文(ps:ここのelse文ではcontinue命令を実行します。つまり外部層forサイクルを巡回し続けます。)は実行されません。その後、else後のバーak文を実行し続けて、外側の層forサイクルから飛び出します。
以上より、target=[1,2,3]の結果が得られました。
2、count=8
count=3の場合、次のような結果が得られます。

target = [1, 2, 3, 4, 5, 6, 7, 8]
同様に、まず外層for循環の第一サブリストを取り出し、第一サブリストは5つの数字しかない。遍歴が終わると、ターゲトの長さは5に等しい。len(=count)は満たされない。
この時、内部層forサイクルは正常に終了しました。forサイクルが正常に終了したので、elseの下の文を実行します。つまりcontinue命令を実行します。ここのcontinueは外部層forサイクルに対して、つまり外部層forサイクルの第二サブリストを取り出し続けます。
第二のサブリストが第三の数字に遍歴すると、ターゲットの長さは8に等しくなり、len(=count)を満足させ、内側のforサイクルから飛び出します。
同じように、この場合は正常に内部forサイクルを終了しないため、後のelse文は実行されません。その後、else後のバーak文を実行し続け、外部forループを飛び出します。
以上より、target=[1,2,3,4,5,6,7,8]の結果が得られました。
締め括りをつける
このページではpythonについてfor...elseが二重ネストループから飛び出す記事を紹介します。これに関連して、python for elseが二重ネストループから飛び出す内容は以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。