2019/11/24
2020/04/14
Python入門 for文に便利な関数をまとめてみた!(enumerate関数,zip関数編)
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)でもこれらの関数はよく使われるものになっています。
どれもとても便利なので是非使ってみてください!
Recommended