Python の for ループ: 知っておくべきすべてのこと

公開: 2022-08-18

このチュートリアルでは、コード例を使用して Python で for ループを使用する方法について説明します。

プログラミングでは、ループは特定の一連のステートメントを繰り返すのに役立ちます。 次の場合は、明確な反復のために forループを使用します。

  • 有限数の要素を持つシーケンスで作業することを知っています
  • 繰り返し回数が事前にわかります

このチュートリアルでは、Python での for ループの操作についてすべて説明します。 まず、for ループを使用して構文と単純な反復を学習します。 次に、コマンド ライン引数の処理、ループ制御ステートメントの使用などについて学習します。

始めましょう…

Python for Loop の構文

Python for Loop の構文

Python で for ループを使用するための一般的な構文は次のとおりです。

 for item in iterable: # do something on item statement_1 statement_2 . . . statement_n

上記の構文では:

  • itemはループ変数です。
  • iterableは、リスト、タプル、文字列などの Python 反復可能オブジェクトを示します。
  • statement_1からstatement_nは、ループ本体内のステートメントを示します。

: iterable の名前の後に必ずコロン ( : ) を追加し、ループ本体内のすべてのステートメントを 4 つのスペースでインデントしてください。

Python の for ループ コンストラクトに共通

for ループ構造

forループを使用する場合:

  • 前のセクションで説明した構文を使用して、アイテムに直接アクセスできます。
  • for ループは、 range()enumerate() ) などの Python 組み込み関数と組み合わせて使用​​できます。

このセクションではそれらについて説明します。

for ループを使用して要素にアクセスする

読みやすくするために、リストの内容を示すループ変数を選択する必要があります。 たとえば、次の例では、 numsは、 numをループ変数として使用する数値のリストです。 for num in nums:が直感的で読みやすいことに注目してください。

 nums = [4,5,9,1,3] for num in nums: print(num) # Output 4 5 9 1 3

さらにいくつかの例を追加すると、 fruitsstudentsリストをループするときに、それぞれfor fruit in fruits:for student in students:を使用できます。

range() 関数で for ループを使用する

インデックスを使用してリスト項目にアクセスする場合は、 range()関数を使用できます。

Python では、 range(start, stop, step)は範囲オブジェクトを返します。これをループしてインデックスを取得できます: startstart + stepなど、 stop まで (ただしstopは含みません)。

 for i in range(len(nums)): print(nums[i]) # Output 4 5 9 1 3

range()関数を使用して、ループする一連の数値を生成することもできます。 以下の例では、オプションのstepパラメーターを 2 に設定しています。したがって、10 から 20 を含まないまでの数値を 2 刻みで取得します。

 for i in range(10,20,2): print(i) # Output 10 12 14 16 18

enumerate() 関数で for ループを使用する

iterable をループして項目とそのインデックスに同時にアクセスしたい場合は、enumerate() 関数を使用できます。

これが例です。

 for idx, num in enumerate(nums): print(f"{idx}:{num}") # Output 0:4 1:5 2:9 3:1 4:3
python-for-loop

Python で for ループを使用してリストから項目を読み取る方法

for ループを使用して Python リストをループするには、前のセクションの汎用構文を使用できます。

以下の例では、 numsは反復可能であり、num はループ変数です。

 nums = [4,5,9,1,3] for num in nums: print(f"{num} times 3 is {num*3}") # action on each num # Output 4 times 3 is 12 5 times 3 is 15 9 times 3 is 27 1 times 3 is 3 3 times 3 is 9

Python で for ループを使用して文字列をループする方法

Python 文字列はイテラブルであり、ループ、インデックス作成、スライスなどを実行できます。

: Python には組み込みの文字データ型がありません。 したがって、文字を長さ 1 の文字列として扱うことができます。

 my_string = "Code" for char in my_string: print(char) # Output C o d e

Python で for ループを使用して配列をループする方法

for ループを使用した配列のループ

ループを使用して配列をループし、for ループをネストすることができます。

以下のコード スニペットでは、array1 は、要素として小さなリストを含むネストされたリストです。 したがって、以下に示すように、array1 をループすると各行が得られます。

 array1 = [[2,3],[7,8]] for row in array1: print(row) # Output [2, 3] [7, 8]

各行の個々の要素にアクセスするには、別のforループを使用できます。

 array1 = [[2,3],[7,8]] for row in array1: for elt in row: print(elt)

上記のコード セルでは、次のようになります。

  • 外側の for ループは、行にインデックスを付けるのに役立ちます。
  • 内側の for ループにより、各行の要素を利用できます。

対応する出力は次のとおりです。

 Output 2 3 7 8

for ループを使用してコマンドライン引数を読み取る方法

コマンドライン

開発者は、コマンド ラインから Python スクリプトを実行し、コマンド ライン引数を使用してスクリプトを操作することに慣れている必要があります。

sys や argparse などの Python の組み込みモジュールを使用して、コマンドライン引数を解析および読み取ることができます。

このセクションでは、 sysモジュールの使用方法とforループの使用方法について説明します — コマンドライン引数のリストをループします。

sys モジュールでは、 sys.argvは、渡すコマンド ライン引数のリストです。したがって、Python のリストをループ処理するのと同じように、 sys.argvをループ処理できます。

 # main.py import sys for arg in sys.argv: print(arg)

以下に示すように、コマンドラインからプログラムを実行できるようになりました。

 $ python main.py Hello Python3 main.py Hello Python3

デフォルトでは、モジュールの名前が最初の引数であり、 sys.argvのインデックス 0 にあります。

インデックスと対応する引数にアクセスする場合は、 range()関数を使用できます。

 # main.py import sys for i in range(len(sys.argv)): print(f"arg{i} is {sys.argv[i]}")

️ 次に、main.py を再実行します。

 $ python main.py Hello Python3 arg0 is main.py arg1 is Hello arg2 is Python3

モジュール名以外の引数を解析して処理したいとします。 以下のコード セルのように、開始値を 1 に設定できます。

 # main.py import sys for i in range(1,len(sys.argv)): print(f"arg{i} is {sys.argv[i]}")
 $ python main.py Hello Python3 arg1 is Hello arg2 is Python3
python-for-loop-command-line-args

すべてをまとめると、main.py ファイルには次のコードが含まれています。

 # main.py import sys print("\nPrinting all command-line arguments...") for arg in sys.argv: print(arg) print("\nPrinting all command-line arguments with index...") for i in range(len(sys.argv)): print(f"arg{i} is {sys.argv[i]}") print("\nPrinting command-line arguments except arg0: module_name...") for i in range(1,len(sys.argv)): print(f"arg{i} is {sys.argv[i]}")

モジュールを実行したときの出力は次のとおりです。

 $ python main.py Hello Python3 Printing all command-line arguments... main.py Hello Python3 Printing all command-line arguments with index... arg0 is main.py arg1 is Hello arg2 is Python3 Printing command-line arguments except arg0: module_name... arg1 is Hello arg2 is Python3

for ループ内で break ステートメントを使用する方法

for ループ内の break ステートメント

他のプログラミング言語と同様に、Python はループ制御ステートメントbreakcontinueの使用もサポートしています。 これらのステートメントは、いくつかの条件に基づいて、ループ内の制御フローを変更するのに役立ちます。 for ループ内でそれらを使用する方法を見てみましょう。

break the ステートメントを使用して、特定の条件がTrueの場合にループから抜け出すことができます。

次のことを行うプログラムを書きたいと思います。

  • 入力数kを固定します。
  • forループを使用して、一度に 1 桁ずつユーザー入力を読み取り、負でない数値 (ゼロ以上) を合計します。
  • このプロセスは、ユーザーが負でない数値を入力している限り続行する必要があります。
  • ユーザーが負の数を入力すると、ループを終了して合計を出力します。

上記のタスクを実行するコードを次に示します。

 k= 5 sum = 0 for i in range(k): num = int(input("\nEnter a number: ")) if num<0: break # exit loop when num < 0 sum += num print(sum)

ユーザーが 0 未満の数値を入力すると、コントロールは for ループから抜け出し、ループの後の最初のステートメントに移動します。

 Enter a number: 2 Enter a number: 3 Enter a number: 5 Enter a number: -1 10

for ループ内で continue ステートメントを使用する方法

continueステートメントを使用して、特定の条件に応じて特定の反復をスキップできます。

前のセクションと同じ例を使用してみましょう。

  • ユーザー入力を読み取り、負でない数値の合計を計算します。
  • ユーザーが負の数を入力した場合、その反復をスキップして次の反復に進み、次の数値を読み込みます。
 k = 5 sum = 0 for i in range(k): num = int(input("\nEnter a number: ")) if num<0: continue sum += num print(sum)

出力例を次に示します。

 Enter a number: 2 Enter a number: 3 Enter a number: 5 Enter a number: -1 Enter a number: 3 13

4 番目の数値は -1 で、これは負です。 ただし、今回は指定された入力数に達するまで for ループが続き、負の入力は無視されます。 基本的に、 k 個の入力数値からすべての非負数値の合計を返します。

Python で無限ループを実行できますか?

無限ループ

これまで説明してきたすべての例とユース ケースで、無限 for ループの問題に遭遇したことはありません。 しかし、Python で無限の for ループを使用できますか?

次の関数double()を考えてみましょう。

 def double(x = 1): return x*2
  • xの値を指定せずに関数double()を呼び出すと、デフォルト値の 1 が使用されます。
  • 関数呼び出しでxの値を指定すると、その値が使用されます。
 double() # Returns: 2 double(20) # Returns: 40

Python では、iter() 関数は反復子オブジェクトを返します。 next(iter-obj)を使用して、シーケンスを反復処理し、後続の項目にアクセスできます。

callable-objectと値、 sentinelを考えてみましょう。

iter(callable-object, sentinel)を使用して、 callable-objectからの戻り値がsentinelと等しくなるまで反復を実行できます。

この場合、無限の for ループを使用できる理由がわかりますか?

python-for-infinite-loop

さて、 callable-objectsentinel値があります。 callable からの戻り値がセンチネルと決して等しくない場合、ループは永遠に続きます!

上記の関数doubleを callable として使用し、sentinel 値を 0 に設定しましょう。

: 関数呼び出しdouble()ではなく、関数doubleの名前に言及してください。

関数doubleからの戻り値は常に 2 であり、決して 0 に等しくならないため、無限ループが発生します!

️ 次のコード セルを実行してみてください。 これは無限ループであり、プログラムを強制停止する必要があります。

 for _ in iter(double,0): print("Running...")
python-for-loop-infinite

Python For ループ: 練習問題

#1 。 for ループを使用して、0 から 20 の範囲のすべての偶数を出力します。

ヒント: 正しいstep値でrange()関数を使用します。

#2 。 20 から 0 までのすべての偶数を出力します。

ヒント: range()関数のstepパラメータには負の値を使用します。

#3 。 3 次元の NumPy 配列を作成します。

ヒント: 配列内の行と個々のエントリにアクセスするには、必要に応じて for ループとネストされた for ループを使用します。

例を試す

まとめ

このチュートリアルで学んだことの要約を次に示します。

  • Python forループをrange()およびenumerate()関数と一緒に使用する構文
  • for ループを使用してリスト、配列、および文字列をループし、コマンドライン引数を読み取る
  • ループ制御ステートメントの使用: breakを使用してループから抜け出し、 continueステートメントを使用して for ループ内で条件に基づいて特定の繰り返しをスキップします。
  • Python の無限 for ループの可能性を理解する

次に、Python で split() メソッドを使用する方法を学びます。