メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2008年2月6日水曜日

[Python][お勉強] Python入門(22) - zip関数

さて、さっさと今日のノルマを終えてしまおう。

今日はzip関数から見ていく。

zip関数とは
複数のシーケンスに並行して同時にアクセスするforループを作るのに便利な関数。
二つのシーケンスがあったとして、


>>> L1 = [1,2,3,4,5]
>>> L2 = [6,7,8,9,10]
>>>


これらの2つのシーケンスを同時に処理する。
とにかく実際にやってみる。

>>> L1
[1, 2, 3, 4, 5]
>>> L2
[6, 7, 8, 9, 10]
>>> zip(L1,L2)
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
>>>


このように2つのシーケンスから1つのシーケンスを作って返す。
結果のそれぞれの要素が2つのシーケンスの値のタプルにな。
最初の要素は、L1[0]とL2[0]のタプル、
次の要素は、L1[1]とL2[1]のタプル・・・
というふうになる。

これをforループで使うと2つシーケンスを同時に処理できる。

>>> for (x,y) in zip(L1,L2):
... print x, y, '--', x+y
...
1 6 -- 7
2 7 -- 9
3 8 -- 11
4 9 -- 13
5 10 -- 15


こんな感じ。

ちなみにzip関数は引数は2つでなければならないわけじゃない。

>>> L3 = [11,12,13,14,15]
>>> L4= [16,17,18,19,20]
>>> L3
[11, 12, 13, 14, 15]
>>> L4
[16, 17, 18, 19, 20]
>>> zip(L1,L2,L3,L4)
[(1, 6, 11, 16), (2, 7, 12, 17), (3, 8, 13, 18), (4, 9, 14, 19), (5, 10, 15, 20)]
>>>


な感じにもりもり引数に渡せる。

上記は全て同じ要素数のシーケンスをパラメータに渡しているが、
それぞれ違う要素数のシーケンスを渡すとどうなるか。

>>> L5=[1,2,3]
>>> L5
[1, 2, 3]
>>> zip(L1,L5)
[(1, 1), (2, 2), (3, 3)]
>>>


となる。L1の要素数は5個。L5の要素数は3個。結果は3個のタプルのリスト。
つまり、引数として渡されたシーケンスの中でもっとも少ない要素数に揃えられる。




おしまい。
.

0 コメント: