Учитывая список слов, сделайте подмножество фраз с ними - PullRequest
1 голос
/ 10 сентября 2010

Как лучше всего выполнить список слов и превратить их в фразы на python.

words = ["hey","there","stack","overflow"]
print magicFunction(words)
>>> ["hey","there","stack","overflow", "hey there stack","hey there", "there stack overflow","there stack", "stack overflow", "hey there stack overflow" ]

Заказ не имеет значения ....

ОБНОВЛЕНИЕ: Должно быть более конкретным, слова должны быть последовательными, как в списке, как в моем примере распечатать. Таким образом, мы могли бы иметь «эй там», но не «эй стек»

Ответы [ 3 ]

2 голосов
/ 10 сентября 2010

Я думаю, что-то вроде этого будет работать, хотя в данный момент у меня нет доступа к python.

def magic_function(words):
  for start in range(len(words)):
    for end in range(start + 1, len(words) + 1):
      yield " ".join(words[start:end])
1 голос
/ 10 сентября 2010
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']
0 голосов
/ 10 сентября 2010

Это будет работать, кажется достаточно эффективным.

def magicFunction(words):
    phrases = []
    start = 0
    end = 0
    for i in xrange(1, len(words) + 1):
        start = 0
        end = i
        while (end <= len(words)):
            phrases.append(" ".join(words[start:end]))
            start += 1
            end += 1
    return phrases
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...