2013-10-28 47 views
1

[代碼如下問題]python中的迭代問題

這個想法是擴展python的內置split()函數。這個函數需要兩個字符串,一個需要分割,另一個是在第一個字符串中省略和分割的字符。這段代碼已經工作,但由於某種原因,這個輸入不會迭代任何超過最後一個逗號的東西。換句話說,不管這種格式的輸入,它都不會追加任何超過最終逗號的東西。我無法弄清楚爲什麼。我已經排隊通過這段代碼,我找不到我失去它的地方。

爲什麼我的代碼不能遍歷最後一個逗號之後的任何字符?

def split_string(source,splitlist): 
    ## Variables ## 
    output = [] 
    start, start_pos , tracker = 0 , 0 , 0 

    ## Iterations ## 
    for char in source: 
     start = source.find(char,start) 
     if char in splitlist: 
      tracker += 1 
      if tracker <= 1: 
       end_pos = source.find(char, start) 
       output.append(source[start_pos:end_pos]) 
       start_pos = end_pos + 1 
      else: 
       start_pos+=1 
     else: 
      tracker = 0 


    return output 



out = split_string("First Name,Last Name,Street Address,City,State,Zip Code",",") 
print out 

回答

4

因爲您的代碼沒有任何代碼可以從最後一個逗號直到字符串末尾附加。

end_pos = source.find(char, start) 
output.append(source[start_pos:end_pos]) 

您需要最後追加逗號和字符串長度之間的範圍。

循環結束後添加以下內容。

output.append(source[end_pos+1:]; 

修改後的代碼: http://ideone.com/9Khu4g

+1

上幾乎死了。無論如何,你引導我走向正確的方向。你把 'output.append(source [end_pos + 1])' 這個修正用於這個特定的輸入,但不適用於其他end_pos實際上是字符串中最後一個位置的其他輸入。儘管如此,你在我的程序中指出了一個漏洞,那就是如何處理end_pos不是字符串的最後位置。 'if source [end_pos]!= source [-1]: output.append(source [end_pos + 1:])' 修復了它。謝謝! – 01110100

+0

是的,我想讓你自己休息一下:) –