Вот как исправить свое первое решение:
s = "I love you"
words = s.split()
def reverse_word(x):
c = list(x)
c.reverse()
return "".join(c)
result = " ".join(reverse_word(w) for w in words)
print(result)
важные вещи, чтобы исправить это, что:
- Просто позвонив
" ".join(c)
без использования его где-то не помогает. c
- это копия x
, а при обратном ее не изменяется x
.
" ".join(c)
все равно неправильно, потому что вы не хотите пробела между буквами, так что теперь это "".join(c)
. Пространства добавляются к фактическому обратному предложению.
И второй один:
s1 = []
for x in words:
new_word = []
c = list(x)
c.reverse()
for y in c:
new_word.append(y)
s1.append("".join(new_word))
result = " ".join(s1)
Важным отличием является то, что вам нужен список для каждого слова (состоящего из букв), а также для всего предложения (состоящий из слов), так как поскольку вы видели, что один список для обоих не работает. Я сохранил его похожим на ваш код, но new_word
на самом деле лишний, поскольку это всего лишь точная копия c
. Таким образом, можно упростить следующим образом:
s1 = []
for x in words:
c = list(x)
c.reverse()
s1.append("".join(c))
result = " ".join(s1)
Это очень общий шаблон: создать пустой список, добавить какой-то элемент к нему в каждой итерации для цикла, а затем сохранить конечный результат. Это настолько часто, что Python имеет специальный синтаксис для этого называется списковых:
def reverse_word(x):
c = list(x)
c.reverse()
return "".join(c)
s1 = [reverse_word(word) for word in words]
Это более элегантный, Pythonic путь. На самом деле вы заметите, что первый бит кода выше почти точно это, за исключением того, что я сразу использовал s1
, даже не назвав его, и нет квадратных скобок, потому что теперь это понимание генератора и хорошая небольшая функция синтаксиса Python означает, что только круглые скобки действительны, так как join
принимает только один аргумент. Но теперь мы углубляемся, не слишком переживайте.
Окончательно reverse_word(word)
может быть просто заменен на word[s::-1]
с использованием нотации среза Python, и все может быть сделано за один шаг, и это решение, данное AKS.
'_' является плохим выбором для имени переменной – vaultah
Я думаю, что это не так, если вы должны игнорировать его. – AKS
да ... но вы не игнорируете его. – vaultah