Symfoware

Symfowareについての考察blog

Pythonでリスト、ディクショナリーの便利なループ方法(enumerate,iteritems,zip)

よく忘れるのでメモしておきます。

参考はこちら。
5.6. ループのテクニック



リストのループ(enumerate)



よく、リストをループするとき何番目かも欲しい時があります。


  1. l = ['one', 'two', 'three']
  2. index = 0
  3. for item in l:
  4.     print index, item
  5.     index += 1




$ python sample.py
0 one
1 two
2 three




「enumerate」を知ってればお手軽にインデックスが取得できます。


  1. l = ['one', 'two', 'three']
  2. for index, item in enumerate(l):
  3.     print index, item








辞書型のループ(iteritems)



辞書の中身に入っている、keyとvalueが欲しい時があります。


  1. m = {'key_1' : 'value_1', 'key_2' : 'value_2'}
  2. for key in m:
  3.     print key, m[key]




$ python sample.py
key_1 value_1
key_2 value_2




「iteritems」を使えば、keyとvalueがいっぺんに取得できます。


  1. m = {'key_1' : 'value_1', 'key_2' : 'value_2'}
  2. for key, value in m.iteritems():
  3.     print key, value









2つのリストを同時にループしたい(zip)



要素数が同じだとわかっているリストを同時にループしながら値を取り出したい。


  1. l1 = ['one', 'two', 'three']
  2. l2 = [u'いち', u'に', u'さん']
  3. for index, item in enumerate(l1):
  4.     print item, l2[index]




$ python sample.py
one いち
two に
three さん




「zip」を使えばお手軽。


  1. l1 = ['one', 'two', 'three']
  2. l2 = [u'いち', u'に', u'さん']
  3. for item1, item2 in zip(l1, l2):
  4.     print item1, item2






3つのリストを同時にループしたい(zip)



zipは2つ以上の引数をとれるので、ループしたいリストの対象が3つになっても大丈夫。


  1. l1 = ['one', 'two', 'three']
  2. l2 = [u'いち', u'に', u'さん']
  3. l3 = ['ein', 'zwei', 'drei']
  4. for item1, item2, item3 in zip(l1, l2, l3):
  5.     print item1, item2, item3




$ python sample.py
one いち ein
two に zwei
three さん drei






zipに指定したリストの数が一緒じゃない



2番目のリストが1番目のリストより少ない場合。


  1. l1 = ['one', 'two', 'three', 'four']
  2. l2 = [u'いち', u'に', u'さん']
  3. for item1, item2 in zip(l1, l2):
  4.     print item1, item2




$ python sample.py
one いち
two に
three さん




1番目のリストが2番目のリストより少ない場合。


  1. l1 = ['one', 'two', 'three']
  2. l2 = [u'いち', u'に', u'さん', u'よん']
  3. for item1, item2 in zip(l1, l2):
  4.     print item1, item2




$ python sample.py
one いち
two に
three さん



ちゃんと要素数が一番少ないリストの数だけループしてくれます。
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2013/12/30(月) 19:52:46|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Pythonのmap,reduce | ホーム | C#のConsole.Writeで、文字を上書き>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1190-89f5a8fc
この記事にトラックバックする(FC2ブログユーザー)