Перевернуть в строке слова с определенной длиной, сохраняя порядок слов

Рейтинг: 1Ответов: 3Опубликовано: 14.02.2023

Как перевернуть в строке слова с определенной длиной, сохраняя порядок строки; как изменять список, не теряя порядок значений?

Нужно перевернуть слова с длиной >=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)) 

Ответы

▲ 2

У вас уже был почти готовый код. Нужно было немного скорректировать списковое включение - 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
▲ 1
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 
▲ 1

Могу написать подробное объяснение своего решения для начинающих:

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"))