Pythonで列挙関数を使用して、カウンターでループを作成します

Use Enumerate Function Python Create Loops With Counters



この記事では、Pythonの標準モジュールライブラリで利用可能な列挙関数の使用法について説明します。列挙関数を使用すると、反復可能なオブジェクトの要素にインデックスまたはカウントを割り当てることができます。次に、値とそれにマップされたカウントの両方にアクセスできるため、それらにさらにロジックを実装できます。

構文と基本例

他のプログラミング言語、特にC言語やCスタイルの構文を持つ他の言語でforループを使用したことがある場合は、ループで開始インデックスを指定している可能性があります。参考までに、Cおよび同様の構文を持つ他の言語でのforループは次のようになります。







にとって ((int= 0;< 10;++)。

{{

printf (('%NSNS')。;

}

ループステートメントは、値がゼロの変数を初期化し、それがしきい値未満であることを確認し、ループブロック内のロジックを評価した後(停止条件が満たされた場合)、1カウントずつインクリメントします。このようにして、インデックスを使用して、ループブロックで参照されている任意のオブジェクトに割り当てることができます。比較すると、Pythonで同じ結果が得られるforループは次のようになります。



にとって 範囲((0 10)。

印刷 (()。

Pythonの範囲関数を使用すると、デフォルトのステップが1である数値範囲シーケンスを指定できます。3番目の引数を指定することで、ステップ値を変更できます。範囲関数の2番目の引数は、停止条件のしきい値を設定するために使用されます。両方のコードサンプルは、次の出力を生成します。



0

1

2

3

4

5

6

7

8

9

これらのループは、数列を生成し、ループステートメント内のロジックに関連付けるだけで問題なく機能します。ただし、別のネストされたループを使用するか、反復可能なタイプでyield関数を使用して、追跡可能なカウントを割り当てる必要がある場合があります。 enumerateメソッドを使用すると、1つのステートメントで反復可能オブジェクトにインデックスを簡単に割り当てることができるため、ネストされた複数のループを実行する必要がなくなります。このコードサンプルをご覧ください。





数字= ['零' '一' '2' '三' '四' '五']

enumerated_numbers= 記載されています((数字)。

にとって索引アイテムenumerated_numbers:

印刷 ((索引アイテム)。

最初のステートメントは、numbersという新しい変数を定義し、それにイテラブル(リストタイプ)を割り当てます。 2番目のステートメントは、必須引数としてiterableを指定するenumerate関数の使用法を示しています。 3番目のステートメントは、enumerated_numbers変数をリスト型オブジェクトに変換します。デフォルトでは、enumerate関数は、反復可能な型ではなく列挙型オブジェクトを生成するため、変換する必要があります。上記のコードサンプルを実行すると、次の出力が得られます。

[(0、 'ゼロ')、(1、 '1')、(2、 '2')、(3、 '3')、(4、 '4')、(5、 '5')]

enumerate関数は、反復可能な型の各要素にカウントを割り当て、ペアの値を持つタプルを作成します。デフォルトでは、カウントはゼロから始まります。



反復可能な型の各要素に番号を割り当てたので、ネストされたステートメントを記述せずに、その要素を簡単にループできます。

数字= ['零' '一' '2' '三' '四' '五']

enumerated_numbers= 記載されています((数字)。

にとって索引アイテムenumerated_numbers:

印刷 ((索引アイテム)。

上記で指定したコードサンプルは、次の出力を生成します。

0ゼロ

1つ

22

3 3

4 4

5 5

以下のサンプルに示すように、列挙関数をインラインで使用することにより、コードを短くすることができます。

数字= ['零' '一' '2' '三' '四' '五']

にとって索引アイテム 記載されています((数字)。

印刷 ((索引アイテム)。

異なる開始インデックスで列挙を使用する

enumerate関数は、開始インデックスを指定できるオプションの引数を取ります。デフォルトではゼロですが、start引数を使用して変更できます。

数字= ['一' '2' '三' '四' '五']

にとって索引アイテム 記載されています((数字始める=1)。

印刷 ((索引アイテム)。

2番目のステートメントでは、start = 1引数を使用して開始点を変更します。上記で指定したコードサンプルを実行すると、次の出力が得られます。

1つ

22

3 3

4 4

5 5

ステップを使用したインデックスの割り当て

この記事の最初のセクションでは、C言語でのforループの構文を示します。ここでは、後続の各カウントまたはインデックス間のステップを定義できます。 Pythonの列挙関数にはそのような引数がないため、カウント間のステップを指定することはできません。実際、独自のロジックを記述して、列挙されたforループブロック内にステップを実装できます。ただし、最小限のコードを記述してカスタムステップを実装する方法があります。次の例は、zip関数と範囲関数を使用したステップの実装を示しています。

数字= ['零' '2' '四' '六']

にとって索引アイテム ジップ((範囲((0 7 2)。数字)。

印刷 ((索引アイテム)。

zip関数を使用すると、2つ以上の反復可能オブジェクトから同じインデックスを持つ要素を取得することでペアを作成できます。したがって、ここでのzip関数は、range(0、7、2)関数から返された反復可能要素から要素を取得し、数値リストから別の要素を取得して、両方をタプルにペアリングします。最終結果は、enumerate関数と同じ実装ですが、range(0、7、2)関数(この場合は2)の3番目の引数としてカスタムステップが指定されています。上記で指定したコードサンプルを実行すると、次の出力が得られます。

0ゼロ

22

4 4

6 6

結論

Pythonの列挙関数を使用すると、反復可能なオブジェクトの要素に数列を割り当てることで、簡潔なコードを記述できます。これは、反復可能な型内のアイテムのインデックスを追跡する場合に非常に便利です。カスタムステップで反復可能な型を列挙する場合は、最後の例で説明したzip関数を使用してください。