для полноты, еще несколько вариантов:
первая версия свободно основана на itertools.pairwise
:
def pairs1(words):
w2 = iter(words)
next(w2, None)
return zip(words, w2)
это хорошо, потому что срез (words[1:]
) в приведенном выше коде Даниэля создает копию списка words
, который может быть большим, в то время как все, что нужно, это итератор в «другой» позиции
другая версия, использующая range()
:
def pairs2(words):
for i in range(1, len(words)):
yield (words[i-1], words[i])
, который похож на Миколу, но мне приятнее. Конечно, любой из них может быть переписан для использования списочных представлений, например:
l = [f'{words[i-1]} {words[i]}' for i in range(1, len(words))]
эквивалентно:
l = [f'{w} {x}' for w, x in pairs2(words)]