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