2016-09-24 108 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会受到您的更改的影响,但最好不要这样做 - 如果您打算在循环内更改列表,则应该复制列表。