2017-03-13 13 views
0

をITER機能を使う:私は以下を使用すると、次の関数内

s = 'hello' 
for i in range(0,len(s)): 
    print next(iter(s)) 

コードはちょうどh 5回を印刷します。 しかしとき:

s = 'hello' 
s_iterable = iter(s) 
for i in range(0,len(s)): 
    print next(s_iterable) 

helloからのすべての文字が印刷されます。

どちらの場合でも、iter(s)s_iterableはイテレータオブジェクトですが、なぜ私は異なる結果をもたらしますか?

+1

'のインデックスの範囲(len(anything)):'はほとんどの場合間違いです--- Pythonはあなたのために忙しい作業をすべて行います。あなたのループは 'for char in string:print char'のように単純なものにすることができます。 Ned Batchelderの「[Loop Like a Native](http://nedbatchelder.com/text/iter.html)」(30分[PyCon US 2013からのビデオ](https://www.youtube.com/watch? v = EnSu9hHGq5o))を使用して、このような多くのケースを処理するための簡単な方法(「Python」)です。 –

答えて

2

最初のループでは、ループ内でiterを繰り返し呼び出します。 iter(s)を呼び出すと、文字列の新しいイテレータが作成され、新しいイテレータが最初から開始されます。最初から何度も何度もやり直すのは意味がありません。だからこそ、hが印刷されるだけです。

関連する問題