2017-06-20 6 views
2

どのようにtee()が実際に動作するのか混乱しています。itertools tee()iterator splitting

l = [1, 2, 3, 4, 5, 6] 
iterators3 = itertools.tee(l, 3) 
for i in iterators3: 
    print (list(i)) 

出力:

[1, 2, 3, 4, 5, 6] 
[1, 2, 3, 4, 5, 6] 
[1, 2, 3, 4, 5, 6] 

これはokです。私がしようとした場合でも:

a, b, c = itertools.tee(l) 

私はこのエラーを取得する:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: not enough values to unpack (expected 3, got 2) 

なぜ?

+1

あなたの3はどこですか? –

+0

@MosesKoledoyeはい、私は今それを得ました。 – MishaVacic

+2

@Coldspeed 'tee'はジェネレータオブジェクトを返さない**ジェネレータオブジェクトを返すのではなく、ジェネレータをアンパックすることもできます。' head、* rest =(iは範囲(10)にあります) 'ジェネレータはiterablesです... –

答えて

2

teeは2つの引数、イテレータ、および数字をとります。実際のイテレータ(コンテキストで)が引数として渡される回数を複製するので、実際にはteeが作成したジェネレータよりも多くのジェネレータを展開できません。

python 3では
a,b = tee(l) #this is ok, since it just duplicate it so you got 2 
a,b,c = tee(l, 3) #this is also ok, you will get 3 so you can unpack 3 
a,b = tee(l, 3) #this will fail, tee is generating 3 but you are trying to unpack just 2 so he dont know how to unpack them 

あなたは次のように解凍することができますateebから最初のイテレータを保持する

a, *b = tee(l, 3) 

はイテレータの残りを開催しますリストに入れてください。