zip() + for 文は総当たりじゃない

 あたり前のことなんだけど、すっかり忘れてた。

zip() は2つのリストの要素を順に取り出し、ペアにしたリストを作る関数で、以下の様な動作をする。

>>> a = ['one', 'two', 'three']
>>> b = [1,2,3]
>>> zip(a,b)
[('one', 1), ('two', 2), ('three', 3)]


for 文で、2つのリストを同時に辿りたい時、以下のように使える。

>>> for x, y in zip(a,b):
...     print x, y
...
one 1
two 2
three 3


対して、総当たりにしたい時はリスト内包や二重ループを使う必要がある。

>>> for x, y in [(x, y) for x in a for y in b]:
...     print x, y
...
one 1
one 2
one 3
two 1
two 2
two 3
three 1
three 2
three 3