#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