2016-03-19 12 views
-2

Ich brauche Sätze zu vergleichen, um zu sehen, ob ein Satz in einem anderen enthalten istPython zu vergleichen Sets

ich zwei Textdateien als Sätze am importieren.

aus den .txt Dateien können Sie sehen, dass die Sätze der Linien bestehen.

  • set1 = set(['thats true', 'thats false'])

  • set2 = set(['Well done thats true', 'Unfortunately thats false'])

'das ist falsch' innerhalb des ersten Index von set2 'Leiderdas ist falsch' erscheint. Wie drucke ich den Index von wo Set1 in Set2 enthalten ist?

+0

Es klingt wie Sie wollen nicht nur prüfen, ob ein Satz eine Teilmenge eines andere ist, aber wenn eine Zeichenfolge (ein Element eines Satzes) ist ein Teil von eine andere Zeichenfolge. Könntest Du das erläutern? –

+0

Sie testen auf * Teilstrings *; Es gibt keine strikte Überschneidung zwischen Ihren Sets, und Python-Set-Objekte unterstützen nicht das, was Sie wollen. Sie müssen entweder N x M-Tests durchführen (das Produkt der beiden Sets erstellen und jede Kombination testen) oder einen Index benachbarter Wörter erstellen, um die Phrasensuche effizienter durchzuführen. Aber das ist zu weit, um hier auf SO zu diskutieren. –

+0

@ T.Silver Do-Sets enthalten Strings? Entschuldigung, wenn Sie richtig liegen. Ich möchte den gesamten zweiten Satz durchsuchen, um zu sehen, ob der erste Satz irgendwo innerhalb des zweiten Satzes enthalten ist. –

Antwort

0

Die Frage sollte geändert werden, um die Tatsache widerzuspiegeln, dass Reihenfolge wichtig ist, also sind die Werte Listen, nicht gesetzt. In diesem Fall sollte der Code unter dem Job

# returns True if l1 is a "substring sublist" of l2 
def is_substring_sublist(l1, l2): 
    next_idx1s = [0] 
    target_idx = len(l1) 
    for idx2 in range(len(l2)): 
     idx1s = [x for x in next_idx1s] 
     next_idx1s = [0] 

     for idx1 in idx1s: 
      if l1[idx1] in l2[idx2]: 
       next_idx1s.append(idx1+1) 

     if target_idx in next_idx1s: 
      return True 
    return False 

# Unit tests 
list1 = ['a', 'b'] 
list2 = ['b', 'a'] 
list3 = ['c', 'a', 'b', 'd'] 
list4 = ['a', 'a', 'b'] 

assert is_substring_sublist(list1, list1) 
assert not is_substring_sublist(list1, list2) 
assert is_substring_sublist(list1, list3) 
assert is_substring_sublist(list1, list4) 
assert not is_substring_sublist(list2, list4)