note.nkmk.me

Pythonでenumerateとzipを組み合わせて同時に使う

Posted: 2017-11-28 / Tags: Python

Pythonのforループでリストなどの要素を取り出すときに便利なのが、enumerate()関数とzip()関数。

enumerate()は要素と同時にインデックスを取得、zip()は複数のリストの要素をまとめて取得できる。

以下、enumerate()zip()を組み合わせて同時に使うときの注意点を述べる。

スポンサーリンク

enumerateとzipを組み合わせて同時に使うときの注意点

enumerate()関数とzip()関数を組み合わせて同時に使う場合、つまり、複数のリストの要素とインデックスを同時に取得したい場合は注意が必要。

for i, (a, b, ...) in enumerate(zip( ... ))のように、zip()でまとめた要素に括弧をつける必要がある。

names = ['Alice', 'Bob', 'Charlie']
ages = [24, 50, 18]

for i, (name, age) in enumerate(zip(names, ages)):
    print(i, name, age)
# 0 Alice 24
# 1 Bob 50
# 2 Charlie 18

zip()でまとめた要素をタプルとして受け取ることもできる。

for i, t in enumerate(zip(names, ages)):
    print(i, t)
# 0 ('Alice', 24)
# 1 ('Bob', 50)
# 2 ('Charlie', 18)
for i, t in enumerate(zip(names, ages)):
    print(i, t[0], t[1])
# 0 Alice 24
# 1 Bob 50
# 2 Charlie 18

なお、標準ライブラリitertoolsモジュールの関数count()zip()を利用すると、入れ子にならない(i, a, b)のような形を実現できる。

スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事