Цикл для удаления только i-го символа строки

#python

#python

Вопрос:

У меня вызывается функция цикла remove , и я хочу показать каждый результат цикла удаления только i-го символа строки. Допустим, у меня есть строка "hello" , и ожидаемый результат функции цикла показан ниже:

 remove("hello")
Remove the position 1: ello
Remove the position 2: hllo
Remove the position 3: helo
Remove the position 4: helo
Remove the position 5: hell
  

Мои коды для функции:

 def remove(string):
    i=0
    for i in range(len(string)):
        removed=string.replace(string[i],"")
        print("Remove the position",i 1,":",removed)
        i=i 1
    return None
  

И вывод моего кода:

 remove_one("hello")
Remove the position 1 : ello
Remove the position 2 : hllo
Remove the position 3 : heo
Remove the position 4 : heo
Remove the position 5 : hell
  

Кажется, что мои коды не только удаляют букву i-й позиции, они также удаляют буквы, когда они совпадают с буквой i-й позиции.
Как я могу исправить коды, которые удаляют только букву i-й позиции?

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

1. replace Функция удаляет их все. Вы могли бы просто сделать что-то вроде: removed = string[:i] string[i 1:] .

Ответ №1:

Использование replace удаляет все вхождения буквы. То, что вы хотите, это просто:

 string = string[:i]   string[i 1:]
  

Вы также можете использовать del :

 del string[i]
  

С первым решением ваш код становится:

 def remove(string):
    i = 0
    for i in range(len(string)):
        removed = string[:i]   string[i 1:]
        print("Remove the position", i 1, ":", removed)
        i = i   1
    return None
  

Ответ №2:

Пара моментов о коде… range возвращает значения от 0 до длины строки, поэтому нет необходимости устанавливать i значение равным нулю. Кроме того, цикл for циклически перебирает значения диапазона для вас, поэтому вам не нужно устанавливать i (используя i = i 1 ) в нижней части цикла for .

 def remove(string):
    for i in range(len(string)):

        # We can use string slicing to find the substring prior to the 
        # character to be removed AND the subtring after the character to
        # be removed.

        # since we will be using the position indicator several times, we can 
        # save that

        result = string[:i]   string[i 1:]

        print("Remove the position", i 1 ,":", removed)
        
remove("hello")
  

выдает:

 ello
hllo
helo
helo
hell
  

Другие примечания:

Все функции Python возвращают None, если вы не указываете явное возвращаемое значение, поэтому мы можем удалить эту строку.