2011-01-14 7 views
5

私がしたいのは、以下のコードで0から5までの整数を出力しますが、得られるのはイテレータのアドレスだけです。イテレータを使って整数を出力する

def main(): 

    l = [] 
    for i in range(0,5): 
     l.append(i) 

    it = iter(l) 

    for i in range(0,5): 
     print it 
     it.next() 

if __name__ == '__main__': 
    main() 
+0

だけ知っているので、 'next()'を呼び出すと、イテレータの次の値が返されます。したがって、ループ本体は 'print it.next()'を読み込む必要があります。 –

+0

イテレータを素早く作成するにはit = iter(range(5)) – nakedfanatic

答えて

9

反復子によって、あなたはそうのようなイテレータのnext()メソッドを使用します。

try: 
    while True: 
     val = it.next() 
     print(val) 
except StopIteration: 
    print("Iteration done.") 

次の()イテレータを進めると、次の要素を返すの目的の両方を持っています。 StopIterationは、反復処理が完了するとスローされます。

これはかなり面倒ですので、これはすべてのために、構文中まできれいに包まれている:

for i in it: 
    print(i) 
print("Iteration done.") 

その他のリンク:

+0

最初のコードブロックで、try文を含めないことは可能ですか? – pandoragami

+0

はい、例外がさらにスローされます。 –

+0

バージョン3のように見えます(__next__の次に変更する必要があります) – kdubs

3

イテレータを使用している場合は、範囲を超えてイテレータを反復処理する必要があります。あなたがループに使用している場合は

for i in it: 
    print(i) 
+0

C++のようにイテレータを間接参照する方法はありますか? – pandoragami

+0

いいえ、Pythonはポインタをまったく使用しません。そして、なぜあなたはしたいですか? Dereferencingは値を取得するために使われ、Pythonはすでにその値を渡しています。 Pythonを使って作業しているときには、C++の言葉で考えないでください。 – Hollister

+1

Python 'it.next()'はC++ '' it ++ ''とほぼ同じです。操作を分けることはありません。 –

3

、あなたが実際に暗黙的にイテレータオブジェクトの__next__メソッドを呼び出しています。だから、あなたは範囲のようなものを使わず、イテレータそのものを使うだけです。 Pythonの3の

for i in it: 
    print i 
それは価値がある何のため

、Pythonの2のxrangerange返された値にアクセスするにはイテレータを返すので、あなたは自分の目的のソリューションを持っているものとあなたの最初のループを書き、

関連する問題