Python/Rubyのzip関数
存在は知っていたけど、あまり使うことがなかった。
が、今日は使いたいと思うケースに遭遇したので、使い方をメモしておく
複数のシーケンスに並行して同時にアクセスするforループを書くのに便利。
# coding=utf-8 seq1 = [1,2,3,4,5] seq2 = ['a','b','c','d','e'] for n, a in zip(seq1, seq2): print n, a # 1 a # 2 b # 3 c # 4 d # 5 e # リスト長が揃っていない場合は短い方の長さまで seq1 = [1,2,3,4,5,6] seq2 = ['a','b','c','d'] for n, a in zip(seq1, seq2): print n, a # 1 a # 2 b # 3 c # 4 d
ついでにrubyも
seq1 = [1,2,3,4,5] seq2 = %w(a b c d e) seq1.zip(seq2).each do |n, a| puts sprintf("%s %s", n, a) end # 1 a # 2 b # 3 c # 4 d # 5 e # リスト長が揃っていない場合は短い方はnilで埋められる seq1 = [1,2,3,4,5,6] seq2 = %w(a b c d) seq1.zip(seq2).each do|n, a| puts sprintf("%s %s", n, a) end # 1 a # 2 b # 3 c # 4 d # 5 # 6
リスト長が揃っていないときの挙動が微妙に異なる