2017-11-02 4 views
2

Ich habe eine Liste von Listen wie folgt.Kombinieren Sie mehrere aufeinanderfolgende Wörter in Python

mycookbook= [["i", "love", "tim", "tam", "and", "chocolate", "ice", "cream"], ["cooking", 
"fresh", "vegetables", "is", "easy"], ["fresh", "vegetables", "and", "fruits", "are", "good", 
"for", "health"]] 

Ich habe auch eine Liste wie folgt.

mylist = ["tim tam", "chocolate ice cream", "fresh vegetables and fruits"] 

Nun, ich möchte die aufeinander folgenden Wörter in mylist und kombinieren sie finden, wie mycookbook zu aktualisieren folgt.

mycookbook = [["i", "love", "tim tam" "and", "chocolate ice cream"], ["cooking", "fresh vegetables", 
"is", "easy"],["fresh vegetables and fruits", "are", "good", "for", "health"]] 

Ich verwende derzeit zwei Wörter wie folgt.

for sentence in mycookbook: 
    i = 0 
    while i < len(sentence) - 1: 
     if sentence[i] + ' ' + sentence[i + 1] in mylist: 
      sentence[i] += ' ' + sentence[i + 1] 
      sentence.pop(i + 1) 
     i += 1 
print(mycookbook) 
+5

Das Problem ist schlecht eingeschränkt. Was sollte die Ausgabe für 'mcookbook = [['a', 'b', 'c']]' und 'mylist = ['a b', 'b c']' sein? – wim

+0

@wim 'mylist' hat keine Wortphrasen wie diese :) –

+1

@Volka wissend dass die Ausgabe von wim's Frage uns hilft Ihnen bei der Lösung Ihres Problems zu helfen. – gommb

Antwort

2

Sie benötigen verschachtelte Schleifen, eine für den Startindex einer Phrase, die nächste für das Ende Index. Sie können dann einen Listenausschnitt verwenden, um alle Wörter dazwischen zu erhalten.

for sentence in mycookbook: 
    i = 0 
    while i < len(sentence): 
     for j in range(i + 1, len(sentence)+1): 
      phrase = ' '.join(sentence[i:j]) 
      if phrase in mylist: 
       sentence[i:j] = [phrase] 
       break 
     i += 1 

Wir können nicht for i in range(len(sentence)) verwenden, da die Länge der sentence Änderungen, wenn wir ein Stück mit dem Satz zu ersetzen.

DEMO

0

erste Antwort ist effizienter, Es habe ich versucht, mit itertool Ansatz:

mycookbook= [["i", "love", "tim", "tam", "and", "chocolate", "ice", "cream"], ["cooking", 
"fresh", "vegetables", "is", "easy"], ["fresh", "vegetables", "and", "fruits", "are", "good", 
"for", "health"]] 
mylist = ["tim tam", "chocolate ice cream", "fresh vegetables and fruits"] 


import itertools 

split_list=[i.split() for i in mylist] 

for item in split_list: 
    for element in mycookbook: 
     for iterindex in itertools.product(enumerate(element),repeat=len(item)): 
      combination=list(zip(*iterindex)) 
      match=combination[0] 
      if " ".join(combination[1])==" ".join(item): 
       for index in match: 
        element[index]=" ".join(item) 
replace_list=[] 
for item in mycookbook: 
    new=[] 
    for item1 in item: 
     if item1 not in new: 
      new.append(item1) 
    replace_list.append(new) 

print(replace_list) 

Ausgang:

[['i', 'love', 'tim tam', 'and', 'chocolate ice cream'], ['cooking', 'fresh', 'vegetables', 'is', 'easy'], ['fresh vegetables and fruits', 'are', 'good', 'for', 'health']] 
Verwandte Themen