元セブ島在住のエンジニアの僕「Tommy」が、プログラミング・英語・セブ事情を発信するブログ

Tommy's blog

【Python】zipとenumerateを使う【→プログラミング初心者向け】

11月 7, 2019

プログラム女子
2つの配列をfor文で使う時、同時に配列を探索する方法ないですかね?
それには「zip」という関数を使うと良いよ。ついでに配列の添字(順番)を知りたい場合もあるから、今回は合わせて説明するね。
Tommy

この記事で分かること

  • Pythonプログラムのenumerate関数の使い方が分かる
  • Pythonプログラムのzip関数の使い方が分かる
  • enumerate関数とzip関数を組み合わせた使い方が分かる

Pythonのzipとenumerateを使う概要

この記事では、配列を扱う場合に便利な関数「zip」と関数「enumerate」の使い方を説明します。

関数「enumerate」は、「配列の要素とインデックスを同時に抽出するPython標準の組み込み関数」です。一方、関数「zip」は、「複数のリスト要素をまとめて取り出すPython標準の組み込み関数」です。

さらに、この記事では、それらの2つを組み合わせた効果的な使い方もサンプルプログラムを使って説明します。

Pythonのzipとenumerateを使う前提環境

「enumerate」と「zip」の使い方の前提環境は、下の記事で説明している私の環境と同じ環境で確認しています。

また、レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。

もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。

Pythonのzipとenumerateを使うサンプルプログラム

ここでは、「enumerate」を使ったサンプルプログラム、「zip」を使ったサンプルプログラム、「enumerate」と「zip」の両方を使ったサンプルプログラムを3つを、実行結果と共に紹介します。説明は次のような順番で説明します。

  1. enumerateを使うサンプルプログラム
  2. enumerateを使うサンプルプログラム実行結果
  3. zipを使うサンプルプログラム
  4. zipを使うサンプルプログラム実行結果
  5. enumerateとzipを組み合わせたサンプルプログラム
  6. enumerateとzipのサンプルプログラム実行結果

1.enumerateを使うサンプルプログラム

配列と要素番号を同時に取り出すサンプルプログラムを説明します。For文などでリストの要素を1つずつ取り出して処理したいけど、その要素が何番目の要素なのかを一緒に知りたいことがあります。「enumerate」はそのような場合に有効です。下のサンプルプログラムのリスト変数「list1」のように文字が入った配列があった場合、「enumerate」はその順番と値を返してくれる関数です。

※一番先頭の値は「0番目」となります。

if __name__ == '__main__':
  list1 = ['A','B','C','D']
  
  for i,ele_list1 in enumerate(list1):
		print(i)
		print(str(ele_list1))

  1. 変数「list1」を「A」から「D」までの文字で初期化する。
  2. 変数「list1」の要素番号を変数「i」に、値を変数「ele_list1」に格納し、以下の処理を繰り返す。
    1. 「i」の内容を表示する
    2. 「ele_list1」の内容を表示する

2.enumerateを使うサンプルプログラム実行結果

下の結果は「enumrate」関数を使うことで変数「list1」の値(要素)として、要素数(奇数行目)と値(偶数行目)に表示されています。

0
a
1
b
2
c
3
d

3.zipを使うサンプルプログラム

次に、2つ配列から同時に要素を1つづつ取り出す「zip」の使い方のサンプルプログラムを説明します。複数のリストから要素を1つずつ取り出してFor文を回したいという場合に、この「zip」は有効です。

if __name__ == '__main__':
	list1 = ['A','B','C','D']
	list2 = ['a','b','c','d']
  
	for ele_list1,ele_list2 in zip(list1,list2):
		print(str(ele_list1)+':'+str(ele_list2))

  1. 変数「list1」を「A」から「D」までの文字で初期化する。
  2. 変数「list2」を「a」から「d」までの文字で初期化する。
  3. 変数「list1」と変数「list2」の要素をそれぞれ、変数「ele_list1」と変数「ele_list2」に格納し、以下の処理を繰り返す。
    1. 変数「ele_list1」と変数「ele_list2」の内容を表示する。

4.zipを使うサンプルプログラム実行結果

下記の結果は、「zip」関数を使うことで、list1とlist2の要素(中身)をセットで表示することができています。

A:a
B:b
C:c
D:d

5.enumerateとzipを組み合わせたサンプルプログラム

最後に、関数「enumerate」と関数「zip」を組み合わせた使い方を説明します。ここでは、2つリスト要素を同時に2つずつ取り出し、要素数も同時に取り出すというサンプルコードを書いています。

リストの要素を1つずつ取り出して処理して、かつ、複数のリストから要素を1つずつ取り出してFor文を回したいという場合に、「enumerate」と「zip」を組み合わせた使い方が有効です。

if __name__ == '__main__':

	list1 = ['A','B','C','D']
	list2 = ['a','b','c','d']
  
	for i,(ele_list1,ele_list2) in enumerate(zip(list1,list2)):
		print(i)
		print(str(ele_list1)+':'+str(ele_list2))

  1. 変数「list1」を「A」から「D」までの文字で初期化する。
  2. 変数「list2」を「a」から「d」までの文字で初期化する。
  3. 「list1」と「list2」の要素をそれぞれ「ele_list1」と「ele_list2」に格納し、さらに要素番号を変数「i」に格納しながら、以下の処理を繰り返す。
    1. 変数「i」の内容を表示する
    2. 変数「ele_list1」と変数「ele_list2」の内容を表示する。

6.enumerateとzipのサンプルプログラム実行結果

下記の結果は、llist1とlist2のリストの大きさ(要素数の数)は同じなので、下記の2つの項目が交互に表示されています。

  • list1とlist2要素番号
  • list1の値とlist2の内容のセット
0
A:a
1
B:b
2
C:c
3
D:d