2016-09-24 5 views
-1

私のコードです。文字列のすべてのスペースを "%20"に置き換えようとしています私のpythonコードの反復は、最大範囲まで行っていません

i = 18の値とlen(var)の値がまだ25の場合、コードはforループを終了します。助けてください。ループが入力されると

var1 = 'hello world ho are ' 
var=list(var1) 
print(len(var1)) 
print(var1[5]) 

n =len(var) 
for i in range(0, len(var)): 
    print(i) 
    print("length before", len(var)) 
    if(var[i] == " "): 
     var[i+3:] = var[i+1:] 
     var[i] = "%" 
     var[i+1] = "2" 
     var[i+2] = "0" 
     print("length after",len(var)) 
     print("value of i", i) 

print(len(var)) 
print((var)) 

答えて

0

、リストvarの長さが18であると計算され、したがってループが18回繰り返されます。

問題は、ループ内のリストの長さを変更することです。しかし、これは最初に計算された番号18を変更しません。

リストを変更する代わりに、ループ内に新しいリストを作成します。

または、python文字列の代わりにreplaceメソッドを使用してください。 forループを使用する場合

var1.replace(" ",%20") 
1

、シーケンス(あなたの例でrange(0, len(var)))が一度評価され、シーケンスの反復子が返されます。反復子が何であるかわからない場合は、range(0, len(var))がforループ実行の最初に1回だけ計算されることを意味します。したがって、元のlen(var)値のようにループが0から18まで繰り返されます。変数iは、リストの変更によって影響を受けません。

リスト自体(for i in var:)をループしていた場合、変更によってはiが実行されますが、実行しないのが最善です。ループ内で変更する予定の場合は、リストをコピーする必要があります。

関連する問題