Gemäß meiner Interpretation der Python 2.7.2-Dokumentation für integrierte Typen 5.7 Set-Typen sollte es möglich sein, die Elemente von Set A aus Set B zu entfernen, indem A an set.remove(elem)
oder übergeben wirdset.discard(elem)
Aus der Dokumentation zu 2.7.2:
Beachten Sie , dass das Elem Argument der
__contains__()
,remove()
unddiscard()
Methoden kann ein Satz sein.
Ich interpretiere dies so, dass ich ein set
an remove(elem)
oder übergeben kann discard(elem)
und alle diese Elemente aus dem Zielsatz entfernt werden. Ich würde dies verwenden, um etwas Seltsames zu tun, wie alle Vokale aus einer Zeichenfolge zu entfernen oder alle gebräuchlichen Wörter aus einem Worthäufigkeitshistogramm zu entfernen . Hier ist der Testcode:
Python 2.7.2 (default, Jun 12 2011, 14:24:46) [M...
Type "help", "copyright", "credits" or "license"
>>> a = set(range(10))
>>> b = set(range(5,10))
>>> a
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b
set([8, 9, 5, 6, 7])
>>> a.remove(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: set([8, 9, 5, 6, 7])
>>> a.discard(b)
>>> a
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>>
Was ich voraussichtlich wiederkommen werde:
>>> a
set([0, 1, 2, 3, 4])
Ich weiß, dass ich dies erreichen kann, a.difference(b)
wodurch ein neuer Satz zurückgegeben wird. oder mit einem set.difference_update(other)
; oder mit Set-Operatoren a -= b
, die das Set an Ort und Stelle ändern.
Ist das also ein Fehler in der Dokumentation? Kann man set.remove(elem)
eigentlich keinen Satz als Argument nehmen? Oder bezieht sich die Dokumentation auf Sätze von Sätzen? Angesichts der Tatsache, dass difference_update
dies meine Interpretation erfüllt, ist der Fall vermutlich der letztere.
Ist das unklar genug?
BEARBEITEN Nach 3 Jahren zusätzlicher (professioneller) Python-Arbeit und nachdem ich kürzlich auf diese Frage zurückgegriffen habe, stelle ich jetzt fest, dass das, was ich eigentlich versucht habe, erreicht werden kann mit:
>>> c = a.difference(b)
set([0,1,2,3,4])
Das ist es, was ich ursprünglich versucht habe zu bekommen.
BEARBEITEN
Nach 4 weiteren Jahren Python-Entwicklung ... ist mir klar, dass diese Operation mit festgelegten Literalen und dem -
Operator sauberer ausgedrückt werden kann . und dass es vollständiger ist zu zeigen, dass die eingestellte Differenz nicht kommutativ ist.
>>> a={0,1,2,3}
>>> b={2,3,4,5}
>>> a-b
set([0, 1])
>>> b-a
set([4, 5])
c = a.difference(b)
funktioniert bei mir. Vielen Dank!