Pythonで繰り返しを効果的に使う

前提条件:Pythonのイテレーター 以下は、反復子を使用するさまざまな方法です。 Cスタイルのアプローチ:このアプローチでは、総反復回数に関する事前知識が必要です。

🐶Pythonコードの例を示すで

# A C-style way of accessing list elements
cars = ["Aston", "Audi", "McLaren"]
i = 0
while (i < len(cars)):
    print cars[i]
    i += 1

🐶動画で動作確認してみよか?

動画で確認

重要なポイント:

for-in(またはeach)スタイルの使用 このスタイルは、Listの反復子、辞書、n次元配列などを含むPythonで使用されます。反復子は各コンポーネントを取得し、ループしながらデータを出力します。この構成では、反復子は自動的に増減されます。

🐶Pythonコードの例を示すで

# Accessing items using for-in loop

cars = ["Aston", "Audi", "McLaren"]
for x in cars:
    print x

🐶動画で動作確認してみよか?

動画で確認

さまざまなデータ型の例については、こちらを参照してください。 Range関数を使ったインデックス:Pythonではrange()を使ったインデックスも使えます。

🐶Pythonコードの例を示すで

# Accessing items using indexes and for-in

cars = ["Aston", "Audi", "McLaren"]
for i in range(len(cars)):
    print cars[i]

🐶動画で動作確認してみよか?

動画で確認

列挙します。 Enumerateは、入力をイテレータ、Listなどとして受け取り、イテレータシーケンス内のインデックスとそのインデックスにあるデータを含むTupleを返す組み込みのPython関数です。たとえば、enumerate(cars)は、(0、cars [0])、(1、cars [1])、(2、cars [2])などを返すイテレータを返します。

🐶Pythonコードの例を示すで

# Accessing items using enumerate()

cars = ["Aston" , "Audi", "McLaren "]
for i, x in enumerate(cars):
    print (x)

🐶動画で動作確認してみよか?

動画で確認

以下の解決策も動作します。

🐶Pythonコードの例を示すで

# Accessing items and indexes enumerate()

cars = ["Aston" , "Audi", "McLaren "]
for x in enumerate(cars):
    print (x[0], x[1])

🐶動画で動作確認してみよか?

動画で確認

enumerate()の戻り値を直接表示して、戻り値を確認することもできます。

🐶Pythonコードの例を示すで

# Printing return value of enumerate()  

cars = ["Aston" , "Audi", "McLaren "]
print enumerate(cars)

🐶動画で動作確認してみよか?

動画で確認

Enumerateはパラメータstartを取ります。デフォルトは0です。このパラメータは好きな値に変更できます。以下のコードでは、startを1として使用しています。

🐶Pythonコードの例を示すで

# demonstrating the use of start in enumerate

cars = ["Aston" , "Audi", "McLaren "]
for x in enumerate(cars, start=1):
    print (x[0], x[1])

🐶動画で動作確認してみよか?

動画で確認

enumerate()は、反復子内の各データ項目にアクセスし、各データ項目のインデックスを取得するための解決策を埋め込むのに役立ちます。

ループ拡張  i)単一のループ構造に対する2つの反復子

🐶Pythonコードの例を示すで

# Two separate lists
cars = ["Aston", "Audi", "McLaren"]
accessories = ["GPS kit", "Car repair-tool kit"]

# Single dictionary holds prices of cars and  
# its accessories.
# First three items store prices of cars and
# next two items store prices of accessories.
prices = {1:"570000$", 2:"68000$", 3:"450000$",
          4:"8900$", 5:"4500$"}

# Printing prices of cars
for index, c in enumerate(cars, start=1):
    print "Car: %s Price: %s"%(c, prices[index])

# Printing prices of accessories
for index, a in enumerate(accessories,start=1):
    print ("Accessory: %s Price: %s"\
           %(a,prices[index+len(cars)]))

動画で確認

ii)zip関数(両方のイテレータが単一ループ構造で使用される) この関数は、i番目の位置で類似の型反復子(list-listまたはdict-dictなど)のデータ項目を組み合わせるのに役立ちます。これは、これらの入力イテレータの最短の長さを使用します。より長い反復子の他の項目はスキップされます。空のイテレータの場合は、No出力を返します。 たとえば、2つのList(反復子)にzipを使用すると、1台の車とそれに必要なアクセサリを組み合わせることができました。

🐶Pythonコードの例を示すで

# Python program to demonstrate the working of zip

# Two separate lists
cars = ["Aston", "Audi", "McLaren"]
accessories = ["GPS", "Car Repair Kit",  
               "Dolby sound kit"]

# Combining lists and printing
for c, a in zip(cars, accessories):
    print "Car: %s, Accessory required: %s"\
          %(c, a)

動画で確認

zip関数からのこれらの反復子の逆は、 "*"演算子を使用した解凍として知られています。 enumerate関数とzip関数を使用すると、Pythonで反復ロジックを効果的に拡張することができ、巨大なタスクや問題に関するさらに多くの副問題を解決できます。

🐶Pythonコードの例を示すで

# Python program to demonstrate unzip (reverse  
# of zip)using * with zip function

# Unzip lists
l1,l2 = zip(*[('Aston', 'GPS'),  
              ('Audi', 'Car Repair'),  
              ('McLaren', 'Dolby sound kit')  
           ])

# Printing unzipped lists       
print(l1)
print(l2)

🐶動画で動作確認してみよか?

動画で確認

参考文献:

  1. https://docs.python.org/2/library/functions.html#enumerate
  2. https://docs.python.org/2/library/functions.html#zip
Last Updated: 5/19/2019, 3:41:22 PM