2016-09-24 107 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字符串的替換方法。

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

當使用for循環中,序列(range(0, len(var))在你的例子)被評估一次,並返回針對序列的迭代器。如果你不知道什麼是迭代器 - 這意味着range(0, len(var))只計算一次 - 在for循環執行的開始,所以你的循環迭代從0到18,就像原始len(var)值一樣,而且變量i不受您在列表中所做更改的影響。

如果您正在循環查看列表本身(for i in var:),那麼i會受到您的更改的影響,但最好不要這樣做 - 如果您打算在循環內更改列表,則應該複製列表。