flatten_for

普通に解けば単純な2重ループだが、1重ループに変換するにはflatten_forを使う。flatten_forは、ネストしながらループする。flatten_forは8月31日の日記を参照。

for i, j in flatten_for(range(1,10), range(1,10)):
    print i, j, i*j
# 出力
1 1 1
1 2 2
1 3 3
...
1 9 9
2 1 2
2 2 4
2 3 6
...
9 9 81

一方、zip関数は複数のシーケンスを平行に回す。

for i, j in zip(range(1,10), range(1,10)):
    print i, j, i*j
# 出力
1 1 1
2 2 4
3 3 9
...
9 9 81

こう考えると、zipと同じカテゴリ上にflatten_forがあっても良い。但し、名前はcombinationの方が良いかもしれない。ちなみに、enumerateもzipに結構近い関数な気がする。