Python入門 for文に便利な関数をまとめてみた!(enumerate関数,zip関数編)

 2019/11/24    Python    

Pythonには数多くの組み込み関数と呼ばれる関数が用意されています。
例えば出力して欲しい時はprint()を使いますが、これもPythonに用意されている組み込み関数の一つになります。

print('Hello World')
Hello World

Pythonの組み込み関数とその詳細はPythonの公式ドキュメントで確認できるので、そちらで見てみてください!
Python 3.7.4ドキュメントー組み込み関数 

数多くある組み込み関数の中でも今回は特にfor文などの操作をする時に便利と感じている組み込み関数を紹介したいと思います!

format関数をわかりやすくまとめた記事はこちら

enumerate関数

enumerate(エニュメレイト)関数は英語で「数え上げる」という意味があります。Pythonにおけるenumerate関数も要素を数え上げる役割を持っています。詳しく見ていきましょう!

enumerate関数とは?

enumerate関数は要素のインデックス番号と要素を同時に取り出すことが出来る関数です。
説明だけ見てもよくわからないので、enumerate関数が欲しくなる問題を見ていきましょう!

[問題]問題の出力結果を参考にして次のリストの要素とインデックス番号を同時に表示してください。

lists = ["Apple","Orange","Tomato","Potato","Banana"]
Index:[0] , Food:Apple
Index:[1] , Food:Orange
Index:[2] , Food:Tomato
Index:[3] , Food:Potato
Index:[4] , Food:Banana

さて、こちらは出来ましたでしょうか?
私のプログラムを解答例として紹介します。

i = 0
for list1 in lists:
    print("Index:[{}] , Food:{}".format(i,list1))
    i += 1
Index:[0] , Food:Apple
Index:[1] , Food:Orange
Index:[2] , Food:Tomato
Index:[3] , Food:Potato
Index:[4] , Food:Banana

という風に書きました。
でもこれ余計な変数iを定義したりするので面倒臭いですよね
ということでenumerate関数を使ってみましょう!

for index,list1 in enumerate(lists):
    print("index:[{}] , food:{}".format(index,list1))
index:[0] , food:Apple
index:[1] , food:Orange
index:[2] , food:Tomato
index:[3] , food:Potato
index:[4] , food:Banana

このようにenumerate関数を使うとリストからインデックス番号と要素を同時に取得することが出来ます。

enumerate関数の書き方

enumerate関数の引数もリスト型、タプル型でないといけません。
またenumerate関数は戻り値として[インデックス番号、要素]が取得できるので、それらを格納するために変数は2つ必要です。

for 変数1,変数2 in enumerate(リスト):
  print("index:[{}] , element:{}".format(変数1,変数2))
変数1:インデックス番号
変数2:要素

必ず変数1の位置にはインデックス番号が入るので、enumerate関数を使うときは注意してください。
またenumerate関数のインデックス番号は何も指定しなければ0から始まりますが、任意の数字から始めることも可能です。

for index,list1 in enumerate(lists,1):
    print("index:[{}] , food:{}".format(index,list1))
index:[1] , food:Apple
index:[2] , food:Orange
index:[3] , food:Tomato
index:[4] , food:Potato
index:[5] , food:Banana

enumerate関数の第2引数として任意の数字を入れてあげれば、その数字からインデックス番号を始めることができます。
ちなみにenumerate関数の第1引数にリスト型、タプル型以外の要素を入れた場合、次のようなエラーが起きます。今回はint型を入れてみました。

page = 1 #変数pageに数字を格納
for index,list1 in enumerate(page):
    print("index:[{}] , food:{}".format(index,list1))
TypeError: 'int' object is not iterable

zip関数

データの圧縮フォーマットでお馴染みのzipですが、Pythonにおけるzip関数はデータの圧縮とは関係ありません。それでもzip関数はコードを書く上で大変便利な関数です!

zip関数とは?

突然ですが、解説を始める前にzip関数の説明の前に次の出力をするプログラムを書いてください。

[問題]太郎さん(20歳)と花子さん(21歳)、次郎さん(17歳)の名前と年齢を同時に出力してください。

今回の問題では次のリストを使ってプログラムを組んでください
names = ["Taro","Hanako","Jiro"]
ages = [20,21,17]

Taroさんは20歳です
Hanakoさんは21歳です
Jiroさんは17歳です

この問題は簡単に見えるのですが、初心者の方は少し手こずるかと思います。
分からなければ解答を見て次に進みましょう!
解答例として私のプログラムを紹介します。

names = ["Taro","Hanako","Jiro"]
ages = [20,21,17]
i = 0
for name in names:
    age = ages[i]
    print("{0}さんは{1}歳です".format(name,age))
    i += 1

こんな感じで書いてみました。
こちらもenumerate関数の時と同じく少しだけ面倒くさいですよね。

今回はリストが2つだけでしたが、このままではこれからリストの数が増えてくるにつれてコードが複雑になってしまいます。
それを解決してくれるのがzip関数です。
zip関数は複数のリストの要素を同時に取得することが出来ます!
先ほどの問題だったら次のように書けます。

for name,age in zip(names,ages):
    print("{0}さんは{1}歳です".format(name,age))
Taroさんは20歳です
Hanakoさんは21歳です
Jiroさんは17歳です

これは、かなり便利ですね!!それではzip関数の書き方について勉強していきましょう!

zip関数の書き方

zip関数の書き方は単純です。注意するべきところとしてはzip関数は引数といてリスト型やタプル型しか指定できないところです。もしそれ以外を入れてしまうとエラーが起きます。
zip関数の書き方はこちらになります。

for list1,list2,...,listN in zip(Lists1,Lists2,...,ListsN)

もしリスト型、タプル型以外の引数を入れてしまうと次のようなエラーが発生します。

names = ["Taro","Hanako","Jiro"]
ages = 20
for name,age in zip(names,ages):
    print("{0}さんは{1}歳です".format(name,age)
""TypeError: zip argument #2 must support iteration""

このようなエラーが出たらzip関数の引数がリスト型、タプル型になっているかどうか確認してください。

zip関数まとめ

zip関数が複数のリストの要素を同時に取得できる便利な関数であることを説明しました。
これは本当によく使うので覚えておいてください!


まとめ

今回はPythonのコードを書く上で是非知っておいて欲しい組み込み関数を2つ紹介しました!

別でformat関数についてわかりやすくまとめている記事はこちらになります!
競技プログラミング(Atcoder)でもこれらの関数はよく使われるものになっています。
どれもとても便利なので是非使ってみてください!

  • 人気の投稿とページ

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です