1defiterchain(n):2print("生成する行列の辺:%s"%n)34 L, F =list(range(n **2)),True5print("生成した行列の数値:%s"%L)67print("\n--------\n")89print("* 前半")10for i inrange(1, n):11print("切り出した数列:%s"%L[:i])12if F ==True:13print("yieldで入れ替えた値(%s)を返しつつ、さらに処理を継続"%sorted(L[:i], reverse=F))14else:15print("yieldで生の値(%s)を返しつつ、さらに処理を継続"%sorted(L[:i], reverse=F))16yieldsorted(L[:i], reverse=F)1718 L, F = L[i:],not F
19print("==>まだ処理していない数値:%s"% L[i:])2021print("\n")2223print("* 後半")24for i inrange(n,0,-1):25print("切り出した数列:%s"%L[:i])26if F ==True:27print("yieldで入れ替えた値(%s)を返しつつ、さらに処理を継続"%sorted(L[:i], reverse=F))28else:29print("yieldで生の値(%s)を返しつつ、さらに処理を継続"%sorted(L[:i], reverse=F))30yieldsorted(L[:i], reverse=F)3132 L, F = L[i:],not F
33print("==>まだ処理していない数値:%s"% L[:i])3435print("\n")3637print("--------\n")3839defiterrows(n):40 source =list(iterchain(n))41print("左上から右下への数列(ソース):%s"%source)42print("\n")4344for i inrange(n):45print("yieldでi=%s行目で、j列目の値を返しつつ、さらに処理を継続...しかもこの際にpopをして破壊読出しをするため、要素がどんどん手前方向に詰まっていく"%i)46yield[source[i+j].pop(0)for j inrange(n)]4748print("\n")495051for row in iterrows(5):52print("iterrows()の結果を横一行ずつ表示")53print(*row, sep=' ')
1defiterchain(n):2 L, F =list(range(n **2)),True3for i inrange(1, n):4yieldsorted(L[:i], reverse=F)5 L, F = L[i:],not F
6for i inrange(n,0,-1):7yieldsorted(L[:i], reverse=F)8 L, F = L[i:],not F
910defiterrows(n):11 source =list(iterchain(n))12for i inrange(n):13yield[source[i+j].pop(0)for j inrange(n)]141516for row in iterrows(5):17print(*row, sep=' ')