2015-12-07 2 views
0

Я пытаюсь понять, как написать программу, которая будет рекурсивно удалять данный элемент из строки python. Вот то, что я до сих пор:Извлечение элемента из строки python рекурсивно?

def remove(x,s): 
    if x == s[0]: 
     return '' 
    else: 
     return s[0] + remove(x,s[1:]) 

При тестировании этого кода на входе удаления («т», «погоди»), кажется, работает до тех пор, пока не достигнет первого «т», но Затем код заканчивается вместо продолжения прохождения строки. Кто-нибудь есть идеи, как это исправить?

+0

Typo. Должен сказать remove (x, s [1:]) в рекурсивном вызове – dtucks

+0

Используете ли вы python 2.x? –

+0

Использование python 3.3 – dtucks

ответ

3

В вашем коде вы возвращаете '', когда вы сталкиваетесь с символом, который вы удаляете.
Это оставит остальную часть строки.

Вы хотите, чтобы продолжать идти через строку вместо (также передавать x в рекурсивных вызовов и добавить базовый вариант):

def remove(x, s): 
    if not s: 
     return '' 
    if x == s[0]: 
     return remove(x, s[1:]) 
    else: 
     return s[0] + remove(x, s[1:]) 

Кроме того, в случае, если вы не знаете, вы можете использовать str.replace() для достижения это:

>>> 'wait a minute'.replace('t', '') 
'wai a minue' 
+0

Именно то, что я искал! Благодаря! – dtucks

+0

'' '' избыточно в 'return '' + remove (x, s [1:])', вам также не нужно else –

+0

Вы правы, я больше ориентировался на исправление кода OP, чем придать смысла. Я предпочитаю иметь 'else' там, только для большей ясности. – stranac

-1

если вы просто заменить/удаление символа, как «т» вы могли бы просто использовать список понимание:

s = 'wait a minute' 
xs = ''.join(x for x in s if x != 't') 
Смежные вопросы