Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
range() / enumerate() / zip()
ループ処理で使われるシーケンス生成・インデックス付与・複数リストの並列処理を行う組み込み関数です。
構文
# 連続した整数のシーケンスを生成します。 range(終了値) range(開始値, 終了値) range(開始値, 終了値, ステップ) # イテラブルの各要素にインデックスを付けて返します。 enumerate(イテラブル, start=0) # 複数のイテラブルを並列にまとめます。 zip(イテラブル1, イテラブル2, ...) # イテラブルを逆順に返します。 reversed(シーケンス)
関数一覧
| 関数 | 概要 |
|---|---|
| range(stop) / range(start, stop, step) | 指定した範囲の整数を生成するオブジェクトを返します。for文や list() と組み合わせて使います。 |
| enumerate(iterable, start=0) | イテラブルの各要素を(インデックス, 値)のタプルで返します。start でインデックスの開始値を変更できます。 |
| zip(*iterables) | 複数のイテラブルから同じ位置の要素をまとめたタプルを返します。最も短いイテラブルに合わせて終了します。 |
| reversed(seq) | シーケンス(リスト・タプル・文字列など)を逆順に返すイテレータを生成します。 |
サンプルコード
# range() で for ループを繰り返します。
for i in range(5):
print(i, end=" ") # 0 1 2 3 4
# 開始値・終了値・ステップを指定します。
for i in range(2, 10, 2):
print(i, end=" ") # 2 4 6 8
# range() を逆順にします。
for i in range(5, 0, -1):
print(i, end=" ") # 5 4 3 2 1
# range() をリストに変換します。
nums = list(range(1, 6))
print(nums) # [1, 2, 3, 4, 5]
# enumerate() でインデックスと値を同時に取得します。
fruits = ["りんご", "みかん", "ぶどう"]
for i, fruit in enumerate(fruits):
print(f"{i}: {fruit}")
# 0: りんご
# 1: みかん
# 2: ぶどう
# start=1 でインデックスを 1 始まりにします。
for i, fruit in enumerate(fruits, start=1):
print(f"第{i}位: {fruit}")
# 第1位: りんご
# zip() で複数のリストを並列処理します。
names = ["太郎", "花子", "次郎"]
scores = [85, 92, 78]
for name, score in zip(names, scores):
print(f"{name}: {score}点")
# 太郎: 85点
# zip() で辞書を作成します。
person = dict(zip(["name", "age", "city"], ["太郎", 20, "東京"]))
print(person) # {'name': '太郎', 'age': 20, 'city': '東京'}
# reversed() でリストを逆順に反復します。
for item in reversed(fruits):
print(item, end=" ") # ぶどう みかん りんご
概要
『range()』はメモリ効率に優れた遅延評価のオブジェクトを返します。『range(1000000)』としても100万個の整数をメモリ上に一度に展開するわけではなく、必要なときに順次生成します。終了値は結果に含まれません(例:『range(5)』は0〜4で、5は含まれません)。
『enumerate()』はインデックスを手動で管理する必要をなくします。『for i in range(len(fruits)):』のような書き方より『for i, fruit in enumerate(fruits):』のほうがPythonらしい(Pythonic)書き方とされています。
『zip()』は最も短いイテラブルに合わせて終了します。長さが異なるイテラブルを扱う場合で、すべての要素を処理したい場合は『itertools.zip_longest()』を使ってください。また、複数のリストを組み合わせてループするのにも使いますが、ソート処理では『sorted()』と組み合わせることも多いです。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。