2017-05-21 5 views
-1

私はPythonを使って競争力のあるプログラミングを解決しようとしており、ネストされたループの使用が必要な問題に直面していました。私は入れ子のforループを使用し、child forループで特定の条件が満たされている場合、parent forループのイテレータの値を増やしました。しかし、forループが終了すると、forループのiteratorの値は変更されません。入れ子のforループのparent forループのイテレータの値を変更しますか?

例:

for i in range(5): 
    print "When i = %d" % (i) 
    for j in range(i+1,5): 
     print j 
     if j % 2 == 0: 
      i = j 

出力:

When i = 0 
1 
2 
3 
4 
When i = 1 
2 
3 
4 
.... 

私はCPU時間とサイクルを減らしたいと、Iの値をインクリメントし、ループはあまり時間を実行させるための方法は?

+2

'while'ループを利用する – kuro

答えて

0

私は可変スコープのアサーションで間違っているかもしれませんが、forループは、ループ内でループ変数をどのように定義しようとしているかに関係なく、ループ変数定義に従います。

ここに、あなたのスクリプトで起こっていることの例があります。 iをどのように設定しても、それはまだrange(5)全体を通過します。

In [1]: for i in range(5): 
    print(i) 
    i=10 
    print(i) 

Out [1]: 0 
10 
1 
10 
2 
10 
3 
10 
4 
10 

代わりforループのwhileループを必要とするので、あなたは、ループ内の任意の変数を再定義することができます。私があなたの正確な問題を正しく理解していれば、あなたはこれを探していると思う:

i = 0 # initialize i 
while i<4:  # ensure i stops at no more than 4 in the final iteration 
    print "When i = %d" % i 
    for j in range(i+1,5): 
     print j 
     if j % 2 == 0: 
      i = j 
      break  # break out of the j loop if this condition is met 
    else:  # iterate i if none of the 'j %...' conditions are met ('break' is not encountered) 
     i+=1 
2

をPythonで使用している場合は、iteratorvalueloopに変更する場合は、while loopを使用してください。あなたの質問は、あなたが達成したいかについては十分明らかではないが、例としては、次のようになります。

i = 0 
while i < 5: 
    print "When i = %d" % (i) 
    i+=1 
    for j in range(i,5): 
     print j 
     if j % 2 == 0: 
      i = j 
1

あなたの問題は十分に明確ではないが、あなたが直接使用することを検討すべきであるforループを変更したい場合whileループ

関連する問題