2016-08-08 8 views
0

Ich habe ein Wörterbuch des Satzes aus einer Liste von String-PythonSchneller Weg ein Wörterbuch des Satzes aus einer Liste von String-Python entfernen

Eine Liste von Strings L1 zu entfernen. Beispiel: L1 = ['Programmer New York', 'Programmer San Francisco']

Ein Wörterbuch der Phrase L2 (alle sind mehr als ein Wort). Beispiel: L2={'New York', 'San Francisco'}

Die erwartete Ausgabe ist, entfernen für jede Zeichenfolge in L1 Teilzeichenfolge, die in L2 vorhanden ist. Die Ausgabe wird also res=['Programmer', 'Programmer'] sein.

def foo(L1, L2): 
    res = [] 
    print len(L1) 
    for i in L1: 
     for j in L2: 
      if j in i: 
       i = i.replace(j, "") 
     res.append(i) 
    return res 

Mein aktuelles Programm ist ein Brute-Force-Double-for-Loop. Aber ist es möglich, die Leistung zu verbessern? Vor allem, wenn die Größe von L1 sehr groß ist.

+4

Ich wähle diese Frage als Wegthema zu schließen, wenn Ihr Code funktioniert, und Sie möchten Kritik/Optimierungen gehört es auf codereview.stackexchange .com –

+0

Sie sollten nicht über L2 überhaupt iterieren müssen. –

+2

@ Two-BitAlchemist Dies sieht wie Beispielcode aus und wäre daher in der Code Review off-topic. Der echte Arbeitscode wäre dort jedoch in Ordnung. – Phrancis

Antwort

1

Versuchen Sie es mit der Karte() und re,

import re 
res = map(lambda i, j: re.sub(" "+i, '', j), L2, L1) 

Die doppelte Anführungszeichen vor dem i sind die Leerzeichen nach Programmierer zu beseitigen.

return list(res) 

P.S. Das explizite Zurückgeben einer Liste ist nur erforderlich, wenn Sie Python 3 verwenden. Lassen Sie mich wissen, ob dies Ihre Geschwindigkeit verbessert.

0

Sie Liste Verständnis verwenden können, um zu tun, um:

l1 = ['Programmer New York', 'Programmer San Francisco'] 
l2=['New York', 'San Francisco'] 
a=[x.split(y) for x in l1 for y in l2 if y in x] 
res=["".join(x) for x in a] 
+0

Ja, für mich ist das nur ein sauberer Weg .. Aber die Komplexität ist immer noch die gleiche .. Vielleicht sollte ich betonen, ich suche einen besseren Algorithmus .. Auch ich bezweifele Verwendung Split wird bessere Leistung als ersetzen. – xuanyue

Verwandte Themen