Разбить строку на N слов со смещением

Помогите начинающему:
Разбить строку на N слов со смещением на одно слово от прошлого словосочетания.

Пример для понимания исходный текст:
Он говорил на том изысканном французском языке......

результат при N=3:

Он говорил на
говорил на том
на том изысканном
том изысканном французском

Подскажите, как данный алгоритм можно реализовать?


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

Автор решения: n1tr0xs

Способ 1:

string = 'Он говорил на том изысканном французском языке'
N = 3
string_list = string.split()

for i in range(len(string_list)):
    k = string_list[i:i+N]
    if len(k) < N:
        break
    print(*k)

Способ 2:

for k in zip(*(string_list[x:] for x in range(N))):
    print(' '.join(k))

Способ 2, но в одну строку:

print(*(' '.join(k) for k in zip(*(string_list[x:] for x in range(N)))), sep='\n')

Способ 1 с файлом:

N = 3
with open('in.txt', 'r') as f:
    string_list = f.read().replace('\n', ' ').split()

file_out = open('out.txt', 'w')
for i in range(len(string_list)):
    k = string_list[i:i+N]
    if len(k) < N:
        break
    file_out.write(' '.join(k) + '\n')
file_out.close()

Способ 2 с файлом:

file_out = open('D:\\out.txt', 'w')
for k in zip(*(string_list[x:] for x in range(N))):
    file_out.write(' '.join(k) + '\n')
file_out.close()
→ Ссылка
Автор решения: Jack_oS
string = 'Он говорил на том изысканном французском языке'
n = int(input())

for i in range(len(spl)+1-n):
    print(' '.join(spl[i:i+n]))

для n=2:

>? 2
Он говорил
говорил на
на том
том изысканном
изысканном французском
французском языке

для n=5:

>? 5
Он говорил на том изысканном
говорил на том изысканном французском
на том изысканном французском языке
→ Ссылка