Как убрать все слова в строке кроме 3 последних?

Мне надо действие, которое будет убирать все слова в строке, кроме 3 последних. (Число строк которые надо убрать не определённые)


Ответы (4 шт):

Автор решения: Victor VosMottor thanks Monica
def f(string, number):
    return ' '.join(string.split(' ')[-number:])
→ Ссылка
Автор решения: Nixs Code
str_s = str.split(" ")
array = []
array.append(str_s[-1])
array.append(str_s[-2])
array.append(str_s[-3])
str_ = array[0] + ' ' + array[1] + ' ' + array[2]
→ Ссылка
Автор решения: Mamba

inp1 = 'Привет, в этой строке есть слова, я хочу получить 3 последних'
inp2 = 'Мало слов'

'''
input:
    inp<str> - строка на входе
    count<int> - Количество последних строк 
return:
    str - строка с тремя последними словами
'''
def a(inp, count):
    # Для начала разбиваем строку по пробельному символу
    buff = inp.split(" ")

    # Выполним выборку слов только если слов в строке больше чем нам надо
    # В противном случае буфер не изменится и мы вернем столько слов, сколько есть
    if len(buff) > count:
        # Получм 3 последних элемента
        # buff[-3:] говорит о том, что мы получаем 3 элемента с конца
        buff = buff[-count:]

    # Оьъеденим полученные элементы массива
    # Если у строки вызвать метод join он возьмет нашу строку как сепаратор
    buff = ' '.join(buff)
    return buff

print(a(inp1, 3))
print(a(inp2, 3))
→ Ссылка
Автор решения: vadim vaduxa
  1. В задаче не сказано, что слова обязательно должны быть разделены пробелом, а следовательно они могут быть разделены табуляцией \t либо переносом строки \n, в том числе в конце строки

  2. В задаче сказано "убрать все слова", следовательно разделители между словами должны остаться неизменными

Отсюда выходит что приведенные ответы "не совсем корректны"

Возможно мой вариант не самый оптимальный, но он отражает смысл задачи

string_ = '''
word1 word2 word3
word4\tword5
'''

def qwe(string_, sep = ' \n\t'):
    count=0
    for s in reversed(string_.rstrip()):
        if count == 3: break
        elif s in sep: count += 1
        yield s

last3 = ''.join(reversed(list(qwe(string_)))).lstrip()
print(last3)

out:

word3
word4   word5

В выводе сохранены изначальные разделители слов, такие как \n и \t

→ Ссылка