import itertools
# Adapted from Python Cookbook 2nd Ed. 19.7.
def windows(iterable, length=2, overlap=0):
"""
Return an iterator over overlapping windows of length <length> of <iterable>.
"""
it = iter(iterable)
results = list(itertools.islice(it, length))
while len(results) == length:
yield results
results = results[length-overlap:]
results.extend(itertools.islice(it, length-overlap))
def magic_function(seq):
return [' '.join(window) for n in range(len(words)) for window in windows(seq, n + 1, n)]
>>> words = ["hey","there","stack","overflow"]
>>> print magic_function(words)
['hey', 'there', 'stack', 'overflow', 'hey there', 'there stack', 'stack overflow', 'hey there stack', 'there stack overflow', 'hey there stack overflow']