невозможно удалить новую строку из строки

#python

#python

Вопрос:

Можете ли вы помочь мне с этой строкой кода python? Я пытаюсь добавить строки в массив и исключить новые строки. Хотя код, похоже, работает при первом разделении строки, кажется, что там есть еще одна новая строка, поскольку она возвращает сообщение об ошибке : substring not found . Однако, когда я напечатал значение cut, оно вернулось kdfjsalsdjf , показывая, что код новой строки был удален

 x='lksjdfalkjdsflkajsdfklnnkdfjsalsdjf'

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
 

Комментарии:

1. это сбой на втором? Вы должны добавить туда несколько операторов печати, чтобы видеть значения по мере выполнения скрипта.

2. Проблема в том, что вы повторяете оригинал x , но повторно вводите его x в свой цикл for. Вот что я бы сделал: `x = x[max([0] [i 2 для i,char в enumerate(x), если char==’n’]):]

3. Вы пробовали x.replace('n', '') ?

4. Почему бы вам не разделить и не использовать последний экземпляр, когда вы знаете, что есть 2 символа новой строки.

Ответ №1:

Почему вы не используете команду «заменить»?

 x.replace("n","")
 

Ответ №2:

Ваша проблема связана с тем фактом, что x выполняемая вами итерация не видит внесенных вами изменений.

Это примерно так:

 x = 'lksjdfalkjdsflkajsdfklnnkdfjsalsdjf'
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 = 'lksjdfalkjdsflkajsdfklnnkdfjsalsdjf'
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 = 'lksjdfalkjdsflkajsdfklnnkdfjsalsdjf'
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 = 'lksjdfalkjdsflkajsdfklnnkdfjsalsdjf'
try:
    max_ind = x.rindex('n')
    x = x[max_ind 2 :]
except ValueError:
    pass