2017-02-05 1 views
1

Ich führe eine Schleife, um Sätze in meine Liste (benannt: Text), die alle (oder alle der angegebenen Tags) enthalten, anhängen, aber das Problem ist, dass ich doppelte Ausgaben seit der Schleife läuft auf allen Tags einzeln zur Identifizierung.Verhindern der Duplizierung innerhalb der Schleife

Gibt es einen Weg, als ob es einen Tag (von den 3 gegeben) in meinem Satz gibt, wird der Satz angehängt? Momentan bekomme ich jeden Ausgang 3 mal wegen dieser 'for'-Schleife in Tags (siehe "Current Output") dh insgesamt 4 * 3 = 12 Ausgänge statt 4. Wenn du meine "Required Output" siehst, die erste Es sind 3 Sätze vorhanden, da sie eines oder alle Tags enthalten und das letzte als "Nicht gefunden" angezeigt wird, da es kein Tag enthält.

Mein Code:

text=[]  
tags=["_NN","_VB","_PRP"] 

sentences =['Thanks_NNS sir_VBP','Oh_UH thanks_NNS to_TO remember_VB','Welcome_VB my_UH child_UH',"hi"] 


for sentence in sentences: 
    for tag in tags: 
     if tag in sentence: 
      z = sentence.split(",") 
      k = " ".join(z)    
      text.append(k) 

     else: 
      text.append("Not found") 

Stromausgang:

['Thanks_NNS sir_VBP', 
'Thanks_NNS sir_VBP', 
'Not found', 
'Oh_UH thanks_NNS to_TO remember_VB', 
'Oh_UH thanks_NNS to_TO remember_VB', 
'Not found', 
'Not found', 
'Welcome_VB my_UH child_UH', 
'Not found', 
'Not found', 
'Not found', 
'Not found'] 

Erforderliche Leistung:

['Thanks_NNS sir_VBP', 
'Oh_UH thanks_NNS to_TO remember_VB', 
'Welcome_VB my_UH child_UH', 
"Not found"] 
+0

Ihre Die erforderliche Ausgabe entspricht der von Ihnen initialisierten "Satz" -Liste, außer dass "hi" durch "Nicht erforderlich" ersetzt wird. Ist es? –

+0

ja, das ist richtig, da es keine der oben genannten Tags enthält. –

Antwort

1

Ihr Code könnte durch die Verwendung Liste Verständnis mit any() vereinfacht werden:

>>> sentences =['Thanks_NNS sir_VBP','Oh_UH thanks_NNS to_TO remember_VB','Welcome_VB my_UH child_UH',"hi"] 
>>> tags=["_NN","_VB","_PRP"] 
>>> replace_with = "Not found" 

>>> [s if any(t in s for t in tags) else replace_with for s in sentences] 
['Thanks_NNS sir_VBP', 'Oh_UH thanks_NNS to_TO remember_VB', 'Welcome_VB my_UH child_UH', 'Not found'] 
1

Wenn ich das richtig das Problem zu verstehen, die Sie von Ihrer inneren Schleife nur eine Antwort wollen : Passt eines der Tags zusammen? Ihr aktueller Code prüft jedes Tag in jedem Satz und antwortet separat für jedes Tag (passt dieses Tag-Match).

können Sie bekommen, was Sie wollen, indem Sie die eingebaute Funktion any auf einem Generator unter Verwendung des Ausdrucks:

for sentence in sentences: 
    if any(tag in sentence for tag in tags): 
     z = sentence.split(",") 
     k = " ".join(z)    
     text.append(k) 
    else: 
     text.append("Not found") 
+0

genau was ich brauchte, danke. –

Verwandte Themen