2016-10-09 24 views
1

Ich muss zwei Listen in einem Programm vergleichen, um zu sehen, ob es passende Zeichenfolgen gibt. Einer von ihnen ist ein txt-Dokument, das ich bereits importiert habe. Das ist was ich tatVergleichen Sie zwei Listen (Python)

def compareLists(self, listA, listB): 
    sameWords = list() 

    for a in xrange(0,len(listA)): 
     for b in xrange(0,len(listB)): 
      if listA[a] == listB[b]: 
       sameWords.append(listA[a]) 
       pass 
      pass 
     pass 
    return sameWords 

Aber wenn ich das Programm laufen lassen zeigt es keine Übereinstimmungen, obwohl ich weiß, dass es eins geben muss. Ich denke, es ist irgendwo im if-Block.

+0

haben Sie einen Debugger ausprobiert? Sie können leicht beobachten, welche Werte listA oder listB in jedem Iterationsschritt haben. – Rockbar

+0

Sie betrachten eine Schnittmengenoperation, wie es scheint. –

+5

'list (set (listA) & set (listB))' liefert genau das, was Sie wollen, wie hier [hier] (http://stackoverflow.com/questions/642763/python-intersection-of-two-lists) . – Efferalgan

Antwort

1

Ich gehe davon aus, dass der Einzug in Ihrem Code korrekt ist. In Fortsetzung Ihrer Strategie sollte dieser Code funktionieren.

Alternativ, wie @ Efferalgan vorgeschlagen, tun Sie einfach die Schnittmenge.

def compareLists(self, listA, listB): 
    return list(set(listA) & set(listB)) 

Hinweis: Die eingestellte Schnittdublettenabgleich Wörter aus Ihrem Ergebnis entfernen.

Wie Sie gesagt haben, lesen Sie in den Zeilen aus einer Textdatei, und es sieht so aus, als ob die Zeilenumbrüche noch drin sind.

my_text_list = [s for s in open("my_text.txt").read().rsplit()] 
+0

Es funktioniert immer noch nicht. Ich bin mir ziemlich sicher, dass es wegen der .txt-Datei ist, aber ich kann es als eine Liste ausdrucken, also importierte ich es richtig. Könnte es möglich sein, dass die Datei einfach zu groß ist? Es hat etwa 15.000 Zeilen –

+0

Die Größe der Liste sollte nicht wichtig sein, es ist nicht * das * groß. Drucken Sie die Liste und überprüfen Sie visuell, ob die darin enthaltenen Wörter Ihren Erwartungen entsprechen. – Efferalgan

+0

15.000 Zeilen sollten in Ordnung sein. Könnten Sie einige der von Ihnen gedruckten Listen posten? –