Создайте тройки из списка слов - PullRequest
4 голосов
/ 30 октября 2009

Допустим, у меня есть список слов, что-то вроде этого:

['The', 'Quick', 'Brown', 'Fox', 'Jumps', 'Over', 'The', 'Lazy', 'Dog']

Я хотел бы создать список списков, каждый массив которого содержит 3 слова, но с возможным триплетом для каждого. Так должно выглядеть примерно так:

['The', 'Quick', 'Brown']
['Quick', 'Brown', 'Fox']
['Brown', 'Fox', 'Jumps']

и так далее. Как лучше всего получить этот результат?

Ответы [ 4 ]

7 голосов
/ 30 октября 2009
>>> words
['The', 'Quick', 'Brown', 'Fox', 'Jumps', 'Over', 'The', 'Lazy', 'Dog']
>>> [words[i:i+3] for i in range(len(words) - 2)]
[['The', 'Quick', 'Brown'], ['Quick', 'Brown', 'Fox'], ['Brown', 'Fox', 'Jumps'], ['Fox', 'Jumps', 'Over'], ['Jumps', 'Over', 'The'], ['Over', 'The', 'Lazy'], ['The', 'Lazy', 'Dog']]
5 голосов
/ 30 октября 2009
b = [a[i:i+3] for i in range(len(a)-2)]
3 голосов
/ 30 октября 2009

С разрезаемыми последовательностями, такими как списки, уже предоставленные ответы работают нормально. Для общего случая, когда слова встречаются в любой итерации (будь то последовательность, файл, что угодно):

def NbyN(seq, N=3):
  it = iter(seq)
  window = [next(it) for _ in range(N)] 
  while True:
    yield window
    window = window[1:] + [next(it)]
0 голосов
/ 30 октября 2009

Не зная, почему вы хотите сделать это или сколько раз это нужно сделать, я бы сказал, просто нарежьте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...