私は組み合わせのペアを反復しようとしています。私は、概念や実用的な観点の両方から、これを行うためのより良い方法を考え出したがなぜループは(ティーと一緒に)、このように振る舞うのか?
、これが私の最初の衝動だったし、それが機能しなかった理由を私は思ったんだけど。
gen = itertools.combinations(range(1, 6), 3)
for i in gen:
gen, gencopy = itertools.tee(gen)
for j in gencopy:
print(i, j)
は、以下の出力を与える:
(1、2、3)(1、2、4)
(1、2、3)(1、2、5)
(1,2,3)(1,3,4)
(1,3,5)
(1,2,3)(1,4,5)
(1、2、3) 、2、3)(2、3、4)
(1、2、3)(2、3、5)
(1、2、3) (2、4、5)
(1、2、3)(3、4、5)
はi
Sの一方のみを横切って反復されることを意味します。私はtee
ラインを変更した場合
は、しかし:
_, gencopy = itertools.tee(gen)
私が期待されるペアのフルセットを取得します。
(注:これを実行する最善の方法は、組み合わせのペアを取得し、teeで提示されたパフォーマンスの問題を避けるために、itertools.combinations
を通してジェネレータに戻すことです。私は、forループの振る舞いと、このように発電機を変えるなぜそれが早期に救済する原因となっている程度興味)documentationから
のpython 3.4:あなたが投稿1:私は同じ出力のいずれかの方法を取得。 –
docsから "一度tee()が分割されると、元のiterableは他の場所では使用しないでください。そうでなければ、teeオブジェクトに通知されずにiterableを進めることができます。だからあなたのコードはいずれかの方法で間違っています。 –
奇数、私はPython 3.6.0を使用しています – OmnipotentEntity