for文で使える便利な関数

7.1 for文で使える便利な関数

Pythonではfor文の機能を拡張させるための関数が標準でいくつか用意されております。以下ではfor文と併用して使える関数について学習していきましょう。

7.1.1 zip関数:複数の要素が取り出せる関数

zip関数とは、リストやタプルなどの複数の配列をまとめるための関数です。複数の引数を従えることができ、引数には配列を指定します。

書式

	zip(配列①,配列②,…)
	

凡例

    books = ['Java','PHP','Python','Javascript']
    prices = [1000,800,2000,1500]
    zip(books,prices)
	

1. for文と併用する方法

zip関数はfor文と併用することが一般的です。併用する場合、仮変数を2つ用意する必要があり、各配列の値がインデックス番号に従って、順番に出力されます。

書式

凡例

実行結果

	Java の値段は 1000 円である。
	PHP の値段は 800 円である。
	Python の値段は 2000 円である。
	Javascript の値段は 1500 円である。
	

以上、zip関数を使ったfor文の凡例になります。
それぞれのリストの各要素は順次取り出され、for文内で宣言した二つの変数(book、price)に代入し、一つの処理が終わると、次の要素の値を代入します。

凡例をイメージで表すと以下の図のようになります。

図 7.1.1:zip関数使ったfor文

7.1.2 enumerate関数:インデックスが取得できる関数

enumerate関数は、配列から各要素のインデックス番号と要素が取得できる関数です。引数にはリストやタプルなどの配列を従え、for文を併用するのが一般的です。

書式

    enumerate(配列)
	

凡例

    books = ['Java','PHP','Python','Javascript']
    enumerate(books)
	

1. for文と併用する方法

enumerate関数はfor文と併用する際は、仮変数を2つ用意する必要があります。左から数えて最初に指定した仮変数にはインデックス番号、2番目に指定した仮変数に配列の各要素が格納され、インデックス番号に従って、順番に出力されます。

書式:イテレータの生成
凡例
実行結果
	0 番目の本は Java である。
	1 番目の本は PHP である。
	2 番目の本は Python である。
	3 番目の本は Javascript である。
	

以上、enumerate関数を使ったfor文の凡例です。
それぞれのリストの各要素は順次取り出され、for文内で宣言した二つの変数(num、book)に代入し、一つの処理が終わると、次の要素の値を代入します。

凡例をイメージで表すと以下の図のようになります。

図 7.1.2:enumerate関数使ったfor文

7.1.3 zip関数、enumerate関数併用のプログラム

ではzip関数、enumerate関数を併用したプログラムを確認していきましょう。

ソース・フォルダー: /Desktop/Python基礎講座
ファイル名: 第7章.ipynb
アクセスURL: http://localhost:8888/notebooks/Desktop/Python基礎講座/第7章.ipynb

    books = ['Java','PHP','Python','Javascript']
    prices = [1000,800,2000,1500]

    for num,(book,price) in enumerate(zip(books,prices)):
        print('No',num,':',book,'の値段は',price,'円である。')
	

実行結果

	No 0 : Java の値段は 1000 円である。
	No 1 : PHP の値段は 800 円である。
	No 2 : Python の値段は 2000 円である。
	No 3 : Javascript の値段は 1500 円である。
	

解説

1、2行目でbooks、priceの二つのリスト型変数を宣言しております。

    books = ['Java','PHP','Python','Javascript']
    prices = [1000,800,2000,1500]
	

4行目でfor文を宣言してます。イテラブルオブジェクトには、「enumerate(~)」指定しているため、インデックス番号を格納するための変数、enumerateの引数の各要素を格納するための変数の2つの変数が必要になります。

    for num,(book,price) in enumerate(zip(books,prices)):
        print('No',num,':',book,'の値段は',price,'円である。')
	

インデックス番号を格納させる1つ目の変数にはnumを従えてますが、enumerateの引数にはzip関数を従えているため、2つ目の中には、zip関数のために2つの仮変数を従える必要があります。
そのため2つ目の中には、booksの各要素を格納するbook、pricesの各要素を格納するpriceを従えてます。
4行目の内容をイメージにすると以下の通りになります。

図 7.1.3:zip関数とenumerate関数を使ったfor文

ポイント

  • zip関数は複数の配列を引数に従え、for文を介して各配列の各要素を取り出すことができる。
  • enumerate関数は配列を引数に従え、for文を介してインデックス番号と各要素の値を取り出すことができる。

NEXT>> 7.2 内包表記によるショートコーディング