組み込みの練習: enumerate()
この演習では、Python の組み込み関数 enumerate() の使い方を練習します。この関数は、インデックス付きのリストを得るのに便利です。たとえば、あなたが主催するパーティーに到着した人のリストがあり、到着順に並んでいるとします(Jerry が最初に到着し、次に Kramer、という具合です)。
names = ['Jerry', 'Kramer', 'Elaine', 'George', 'Newman']
到着順を示すインデックスを人名に付けたい場合、次のような for ループを使うことも できます。
indexed_names = []
for i in range(len(names)):
index_name = (i, names[i])
indexed_names.append(index_name)
[(0,'Jerry'),(1,'Kramer'),(2,'Elaine'),(3,'George'),(4,'Newman')]
ただし、これは最も効率的な解決策ではありません。enumerate() を使って、これをより効率的にする方法を見ていきましょう。
この演習はコースの一部です
効率的なPythonコードの書き方
演習の手順
for i in range(len(names))の代わりに、enumerate()を使い、インデックス変数としてi、イテレータ変数としてnameを使うように for ループを更新してください。- 先ほどの for ループを書き換え、
enumerate()とリスト内包表記を用いて新しいリストindexed_names_compを作成してください。 - さらに、
namesに対してenumerate()を使って生成される enumerate オブジェクト を、アスタリスク(*)でアンパックして別のリスト(indexed_names_unpack)を作成してください。今回は、enumerate()の 開始インデックスを 0 ではなく 1 にしてください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Rewrite the for loop to use enumerate
indexed_names = []
for ____,_____ in ____(names):
index_name = (i,name)
indexed_names.append(index_name)
print(indexed_names)
# Rewrite the above for loop using list comprehension
indexed_names_comp = [(____,____) for i,name in ____(names)]
print(indexed_names_comp)
# Unpack an enumerate object with a starting index of one
indexed_names_unpack = [____(names, ____)]
print(indexed_names_unpack)