Перевернуть в строке слова с определенной длиной, сохраняя порядок слов
Как перевернуть в строке слова с определенной длиной, сохраняя порядок строки; как изменять список, не теряя порядок значений?
Нужно перевернуть слова с длиной >=5, например "Hey fellow warriors" должен возвращать "Hey wollef sroirraw" Возможно ли сделать это с помощью for? Если создавать 2 пустых списка, то при их сложении теряется порядок слов строки. С помощью чего его можно сохранить? Мне неясно, как вообще изменять список, не теряя порядок значений.
#sentence = "Hey fellow warriors"
#sentence = "This is a test"
sentence = "This sentence is a sentence"
def spin_words(sentence):
words = sentence.split()
p = [o[::-1] for o in words if len(o)>=5]
return(p)
# данном случае возвращает ['ecnetnes', 'ecnetnes'], если пишем без if len(o)>=5, вернет просто перевернутую строку
print(spin_words(sentence))
Ответы (3 шт):
sentence = "Hey fellow warriors"
#sentence = "This is a test"
#sentence = "This sentence is a sentence"
def spin_words(sentence):
p=''
for el in sentence.split():
# if len(el)>5:
if len(el)>=5:
p+=el[::-1]+' '
else:
p+=el+' '
# return p
return p.strip()
def main():
print(spin_words(sentence))
if __name__ == '__main__':
main()
Вывод:
Hey wollef sroirraw
У вас уже был почти готовый код. Нужно было немного скорректировать списковое включение - o[::-1] if len(o) >= 5 else o вместо if len(o)>=5, а также добавить join() для склеивания слов во фразу. o[::-1] if len(o) >= 5 else o - это тернарный условный оператор, означающий: перевернуть слово, если длина больше или равна 5, иначе не переворачивать.
sentence = "This sentence is a sentence"
def spin_words(sentence):
return ' '.join(o[::-1] if len(o) >= 5 else o for o in sentence.split())
print(spin_words(sentence))
This ecnetnes is a ecnetnes
Могу написать подробное объяснение своего решения для начинающих:
def spin_words(sentence):
words = sentence.split()
for i in range(len(words)):
if len(words[i]) >= 5:
words[i] = words[i][::-1]
return " ".join(words)
Функция разбивает строку на слова с помощью метода split() и сохраняет их в список words, затем функция перебирает в цикле все слова и проверяет длину. Если длина равна или больше 5 то она переворачивает слово используя срез [::-1]. Данный срез возвращает все элементы списка в обратном порядке и сохраняет обратно в список words. После используем " ".join(words) что бы объединить слова обратно в строку разделяя пробелами.
Использование:
print(spin_words("Hey fellow warriors"))