Как заменить символ индексом в строке, содержащей те же символы - PullRequest
0 голосов
/ 15 апреля 2020

Я новичок ie в Python и со вчерашнего дня я застрял в проблеме. Я попытался уменьшить его до нескольких строк, в основном, строка не обновляется.

e = '*****'
for i in e:
    if e.index(i) == 2:
        e = e.replace(i, 'P')
print(e)
# *****

Ответы [ 4 ]

6 голосов
/ 15 апреля 2020

index(i) здесь всегда равно нулю, поскольку функция индекса находит индекс первого вхождения, ie, здесь его ноль. Таким образом, индекс никогда не равен 2, а строка одинакова.
Итак, для этого воспользуемся функцией соединения:

''.join(e[i] if i!=2 else 'P' for i in range(len(e)))

дает:

'**P**'

Или как @furas говорит, ломтик:

e[:2] + 'P' + e[3:]
3 голосов
/ 15 апреля 2020

Проблема с вашим кодом в том, что e.index(i) вернет первый экземпляр этого типа найденного символа, в этом случае вся ваша строка будет '\*' символов, поэтому e.index('\*') всегда будет возвращать 0: и ваш оператор if никогда не оценивается как True.

Я бы предложил следующий код для выполнения sh желаемой задачи:

e = '*****'
for index, character in enumerate(e):
    if index == 2:
        e = e[:index] + 'P' + e[index+1:]
print(e)
2 голосов
/ 15 апреля 2020

Чтобы сохранить код в аналогичном формате и решить проблему, вы можете сделать это:

e = "*****"
new_str = ""
for i, j in enumerate(e):
    if i == 2:
        j = "P"
    new_str += j
print(new_str)

Это также сделает это:

e = "*****"
e = e[:2] + "P" + e[3:]
print(e)
1 голос
/ 15 апреля 2020

str.replace (old, new [, count])

Возвращает копию строки со всеми вхождениями подстроки old, замененной на new. Если указан необязательный аргумент count, заменяются только первые вхождения count.

https://docs.python.org/3/library/stdtypes.html#str .replace

Таким образом, replace() не принимает индекс. Он находит подстроку и заменяет ее другой. Чтобы заменить символ с индексом 1 на символ 'X', вы можете сделать:

e = '*****'
e = e[:1] + 'X' + e[2:]  # '*X****'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...