2017/04/02

【Python】enumerate関数とzip関数

Pythonの勉強してたら便利な関数を見つけたのでメモ。
プログラミングコンテストで遊ぶときに知っているとコーディングが楽になるかもしれない。

今日のコンテンツ
  • enumerate関数
  • zip関数


まずは使っているPythonのバージョンですが 3.5.1 です。

$ python -V
Python 3.5.1

なお、実行環境で動かしながら確認したい方は下記のサイトが便利かも知れません。
Python以外の言語も実行できたりします。

repl.it



構文的には次のように書けます。

enumerate(iterable, start=0)


次のコードを sample1.py として保存したと仮定して…

# -*- coding: utf-8 -*-
 
characters = [
    "かばん",
    "サーバル",
    "ボス"
]
 
for index, name in enumerate(characters):
    print(index, name)

sample1.py の実行結果は次のようになります。

$ python sample1.py 
0 かばん
1 サーバル
2 ボス

インデックスは省略すると 0 から始まりますが、指定することも可能です。

インデックスが 1 から始まるサンプルを書いてみましょう。次のコードを sample2.py として保存してみます。


# -*- coding: utf-8 -*-
 
titles = [
    "さばんなちほー",
    "じゃんぐるちほー",
    "こうざん",
    "さばくちほー",
    "こはん",
    "へいげん",
    "じゃぱりとしょかん",
    "ぺぱぷらいぶ",
    "ゆきやまちほー",
    "ろっじ",
    "せるりあん",
    "ゆうえんち"
]
 
for index, title in enumerate(titles,start=1):
    print("第{0}話 「{1}」".format(index, title))

sample2.py の実行結果は次の通りです。

$ python sample2.py 
第1話 「さばんなちほー」
第2話 「じゃんぐるちほー」
第3話 「こうざん」
第4話 「さばくちほー」
第5話 「こはん」
第6話 「へいげん」
第7話 「じゃぱりとしょかん」
第8話 「ぺぱぷらいぶ」
第9話 「ゆきやまちほー」
第10話 「ろっじ」
第11話 「せるりあん」
第12話 「ゆうえんち」

コードディングの量が減らせるので便利です。

構文としては次のように書けます。

zip(*iterables)


サンプルのコードを書いてみます。次のコードを sample3.py として保存してみます。

# -*- coding: utf-8 -*-
 
friends = [
    'サーバル',
    'コツメカワウソ',
    'ジャガー',
]
 
guides = [
    'しんざきおにいさん',
    'くどうおねえさん',
    'なかやまおにいさん',
]
 
for (friend, guide) in zip(friends, guides):
    print("わーい!{0} ちゃんのかいせつをしてくれたのは {1} なんだねー!".format(friend,guide))

sample3.py の実行結果は以下のようになります。

$ python sample3.py 
わーい!サーバル ちゃんのかいせつをしてくれたのは しんざきおにいさん なんだねー!
わーい!コツメカワウソ ちゃんのかいせつをしてくれたのは くどうおねえさん なんだねー!
わーい!ジャガー ちゃんのかいせつをしてくれたのは なかやまおにいさん なんだねー!

friends の i 番目の要素とguides の i 番目の要素が同時に取り出されているのが分かりますね。

ちなみに、要素数が一致しないときは最短のほうに合わせてループが終わります。
例として次のコードを sample4.py という名前で保存してみます。

# -*- coding: utf-8 -*-
 
characters = [
    'サーバル',
    'かばん'
]
 
skills = [
    '足も速くて鼻も耳もいい'
]
 
for (character, skill) in zip(characters, skills):
    print("{0} は {1}".format(character, skill))

characters の要素が2つであるのに対し、skills は要素が1つだけしかありません。
この場合、実行してみると skills の要素数 1 に合わせてループは 1 回で終了します。
そのため、実行結果は以下のようになります。

$ python sample3.py 
サーバル は 足も速くて鼻も耳もいい

enumerate関数、zip関数ともに下記のサイトを参考にしました。

docs.python.jp


  • enumerate関数は各要素にインデックス番号を振ることができる
  • zip関数は引数で渡されたリストの各要素を順にタプルとして返してくれる
  • 『けものフレンズ』はとてもよいアニメなので観る価値がある


けもフレはいいぞ



[広告]

Amazon

けものフレンズBD付オフィシャルガイドブック (1)


関連記事

スポンサーリンク

スポンサーリンク

スポンサーリンク

コメント

非公開コメント