Обратная строка в цикле for - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть следующая функция:

s = 'hello'
rev = ''

for char in s:
    rev = char + rev
return rev

Почему вышеуказанный цикл for добавляет символы в обратном порядке? Я попытался использовать rev += char, и он вернул строку в исходном порядке, s. Это было упомянуто в видео, и они не объяснили должным образом, просто сказали «Python for loop over string не работает таким образом». Я хочу знать, почему это происходит, поэтому в будущем я буду более склонен избегать этих ошибок.

Другой вопрос, могу ли я реализовать этот тип строки в списках for-loop over и будет ли этовыводить обратный список? Поскольку списки изменчивы.

Ответы [ 2 ]

3 голосов
/ 02 ноября 2019

Оператор + в строках означает конкатенацию, которая не является коммутативной. Так что есть разница между char + rev и rev + char.

Последовательное добавление следующего символа впереди эффективно переворачивает строку.

1 голос
/ 02 ноября 2019

В цикле, который у вас есть, ваш цикл for определяется как:

s = 'happy'
rev = ''

for char in s:
    rev = ch + rev

Если мы посмотрим на это, пройдя первые несколько итераций, мы получим: h аа, тьфу, тьфу, yppah

Это потому, что когда вы обновляете переменную rev, вы добавляете следующий символ (char) перед rev через ваше определение.

rev = NEW CHARACTER + CURRENT REV, поэтому смотрите на последнюю итерацию, гдемы добавляем y, вы добавляете:

rev = NEW CHARACTER (Y) + CURRENT REV (PPAH), в основном утверждая, что вы добавляете PPAH к букве y вместо y к PPAH.

Цикл можно легко исправить, поменяв местами ch и rev:

for char in s:
    rev = rev + char
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...