Python での美しいループ


この記事は、「美しく慣用的な Python コードを書く」シリーズの最初の記事です. Python を使用したループの慣用的な方法について説明します.

Obs .: コードの品質/設計は主観的なものです.異議を唱えたり、同じことを行うためのさまざまなアプローチや代替方法について自由にコメントしてください.

概要


  • Loop over a numeric interval
  • Loop over a collection
  • Loop over a collection and indices
  • Loop over a collection in reverse order
  • Loop over two collection at the same time
  • Loop over a list in orderly fashion

  • 数値間隔でループする



    してはいけないこと:

    for i in [1, 2, 3, 4, 5]:
        print(i ** 2)
    


    行う:

    for i in range(6):
        print(i ** 2)
    


    コレクションをループする



    してはいけないこと:

    colors = ["red", "green", "blue", "yellow"]
    for i in range(len(collection)):
        print(colors[i])
    


    行う:

    colors = ["red", "green", "blue", "yellow"]
    for color in colors:
        print(color)
    


    コレクションとインデックスをループする



    してはいけないこと:

    colors = ["red", "green", "blue", "yellow"]
    for i in range(len(collection)):
        print(i, "--->", colors[i])
    


    行う:

    colors = ["red", "green", "blue", "yellow"]
    for index, color in enumerate(colors):
        print(index, "--->", color)
    


    コレクションを逆順にループする



    してはいけないこと:

    colors = ["red", "green", "blue", "yellow"]
    for i in range(len(colors) -1, -1, -1):
        print(colors[i])
    


    行う:

    colors = ["red", "green", "blue", "yellow"]
    for color in reversed(colors):
        print(color)
    


    2 つのコレクションを同時にループする



    してはいけないこと:

    colors = ["red", "green", "blue", "yellow"]
    names = ["Hicaro", "Julia", "Fred", "Jake", "Mike"]
    
    n = min(len(colors), len(names))
    
    for i in range(n):
        print(colors[i], names[i])
    


    行う:

    colors = ["red", "green", "blue", "yellow"]
    names = ["Hicaro", "Julia", "Fred", "Jake", "Mike"]
    
    for color, name in zip(colors, names):
        print(color, name)
    


    別の方法は、巨大なリストに izip() を使用することです (パフォーマンスのトレードオフに関して適切なオプション).

    colors = ["red", "green", "blue", "yellow"]
    names = ["Hicaro", "Julia", "Fred", "Jake", "Mike"]
    
    for color, name in izip(colors, names):
        print(color, name)
    


    リストを順番にループする



    行う:

    names = ["Hicaro", "Julia", "Fred", "Jake", "Mike"]
    for name in sorted(names):
        print(name)
    


    ループの前にリストをソートしたくない場合は、上記でこれを行うことができます.

    辞書をループする



    行う:

    info = {"Name": "Hicaro", "Age": 18, "Tel": 2319321931-1}
    
    for key, value in info.items():
        print(f"{key} --> {value}")
    


    参考文献



    PEP8