Python/Rubyのzip関数

存在は知っていたけど、あまり使うことがなかった。
が、今日は使いたいと思うケースに遭遇したので、使い方をメモしておく

複数のシーケンスに並行して同時にアクセスするforループを書くのに便利。


python

# 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

リスト長が揃っていないときの挙動が微妙に異なる