2016-10-16 6 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', но заставляете' x' в пределах вашего цикла for. Вот что я хотел бы сделать: '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 в для цикла, не отражены в будущих итераций для цикла.

Вы можете исправить это некоторое время петли вместо:

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 
Смежные вопросы