2010-09-10 5 views
1

Quelle est la meilleure façon de prendre les résultats d'une liste de mots et de les transformer en phrases en python.Étant donné une liste de mots, créez un sous-ensemble de phrases avec eux

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" ] 

ordre doesnt ....

MISE À JOUR: aurait dû être plus précis, les mots doivent être consécutifs, comme dans la liste comme dans mon exemple imprimer. Donc, nous pourrions avoir « hey là » mais pas « hey pile »

Répondre

1
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)] 

Résultats:

>>> 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'] 
2

Je pense que quelque chose comme cela va fonctionner, même si je n'ai pas accès à python au moment .

def magic_function(words): 
    for start in range(len(words)): 
    for end in range(start + 1, len(words) + 1): 
     yield " ".join(words[start:end]) 
0

Cela fonctionnera, semble raisonnablement efficace.

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 
Questions connexes