2016-10-16 55 views
1

您能幫我解決這一行python代碼嗎?我正在嘗試向數組添加字符串,並排除換行符。雖然代碼在第一次分割字符串時似乎工作,但它似乎認爲那裏有另一個換行符,因爲它返回一條錯誤消息:substring not found。然而,當我打印剪裁的價值,它返回kdfjsalsdjf,顯示了新行代碼已被刪除無法從字符串中刪除換行符

x='lksjdfalkjdsflkajsdfkl\n\nkdfjsalsdjf' 

for i in x: 
    if i=='\n': 
     cut=x.index(i) 
     x=x[cut+2:] 


Traceback (most recent call last): 
    File "<pyshell#5>", line 3, in <module> 
    cut=x.index(i) 
ValueError: substring not found 
+0

是它失敗的第二個?您應該在其中添加一些打印語句,以便在腳本運行時查看這些值。 –

+1

問題在於你正在迭代原來的'x',但在你的for循環中重複使用'x'。這裏是我會做的:'x = x [max([0] + [i + 2爲i,char枚舉(x)如果char =='\ n']):] – inspectorG4dget

+1

你試過'x.replace ('\ n','')'? – Prabhakar

回答

3

你爲什麼不使用「替換」命令?

x.replace("\n","") 
1

你的問題源於你迭代的x沒有看到你所做的改變。

這有點像這樣:

x = 'lksjdfalkjdsflkajsdfkl\n\nkdfjsalsdjf' 
y = x 
for i in x: 
    if i=='\n': 
     cut = y.index(i) 
     y = y[cut+2:] 

這是因爲如何str.__iter__作品,以及因此,改變您對x for循環中都沒有反映在for循環的未來迭代。

您可以用while循環,而不是解決這個問題:

i = 0 
while < len(x): 
    if x[i] == '\n': 
     x = x[i+2 :] 
     i = -1 
    i += 1 

這有點令人費解,因爲它似乎要找到'\n'最後一次出現,並採取後,無論是2個字符。所以,你可以這樣做:

x = 'lksjdfalkjdsflkajsdfkl\n\nkdfjsalsdjf' 
inds = [] 
for i,char in enumerate(x): 
    if char=='\n': 
     inds.append(i) 
if not inds: # '\n' was nowhere in the string 
    x = x # we don't have to make any changes 
else: 
    max_ind = max(inds) 
    x = x[max_ind+2 :] 

現在,讓我們縮短這個:

x = 'lksjdfalkjdsflkajsdfkl\n\nkdfjsalsdjf' 
inds = [i for i,char in enumerate(x) if char=='\n'] 
max_ind = max(inds)+2 if inds else -2 
x = x[max_ind :] 

或者:

x = 'lksjdfalkjdsflkajsdfkl\n\nkdfjsalsdjf' 
try: 
    max_ind = x.rindex('\n') 
    x = x[max_ind+2 :] 
except ValueError: 
    pass