さて、さっさと今日のノルマを終えてしまおう。
今日は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 コメント:
コメントを投稿