Python set Union und set-Kreuzung anders funktionieren?
Ich bin dabei einige set-Operationen in Python, und ich bemerkte etwas merkwürdiges..
>> set([1,2,3]) | set([2,3,4])
set([1, 2, 3, 4])
>> set().union(*[[1,2,3], [2,3,4]])
set([1, 2, 3, 4])
Dass das gut ist, was man sich erwartet - aber mit Kreuzung:
>> set([1,2,3]) & set([2,3,4])
set([2, 3])
>> set().intersection(*[[1,2,3], [2,3,4]])
set([])
Bin ich meinen Verstand verliere hier? Warum ist nicht festgelegt.intersection() funktionieren wie ich es erwarten?
Wie kann ich den Schnittpunkt von viele Sätze wie ich mit union (vorausgesetzt, die [[1,2,3], [2,3,4]]
hatte einen ganzen Haufen Listen)? Was würde der "pythonic" Weg sein?
InformationsquelleAutor der Frage Bilal Akil | 2013-10-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie
set()
erstellen Sie eine leere Menge. Wenn Sie das tunset().intersection(...)
Sie sind sich überschneidende diese leere Menge mit anderen Sachen. Die Schnittmenge einer leeren Menge mit einer beliebigen anderen Sammlung von Mengen leer ist.Wenn Sie tatsächlich haben eine Liste von setztSie können Holen Sie sich Ihre Schnittmenge ähnlich wie du es gemacht hast.
Können Sie dies nicht direkt mit der Art und Weise Sie es tun, obwohl, weil Sie nicht wirklich irgendwelche Sätze überhaupt in deinem Beispiel mit
intersection(*...)
. Sie müssen nur eine Liste von Listen. Sollten Sie zuerst konvertieren Sie die Elemente in Ihrer Liste setzt. Also, wenn Siesollten Sie tun
InformationsquelleAutor der Antwort BrenBarn
ist natürlich leer, weil Sie beginnen mit der leeren Menge und schneiden es mit allen anderen
Können Sie versuchen, den Aufruf der Methode auf die
class
aber das wird nicht funktionieren, da das erste argument übergeben werden muss, um einen Satz
Sieht dies ungeschickt, wenn du besser verwenden könnte, eine Liste von Sätzen in den ersten Platz. Vor allem, wenn Sie kommen aus einem generator, der es schwierig macht zu ziehen aus der ersten Element sauber
Ansonsten kann man nur machen Sie alle in sets
InformationsquelleAutor der Antwort John La Rooy
konvertieren Sie die Liste zunächst
Mehrere Listen können Sie nur verwenden,
InformationsquelleAutor der Antwort Anto
[entfernt falsche Antwort]
Als @Anto Vinish vorgeschlagen, sollten Sie zuerst konvertieren Sie die Listen, sets und verwenden Sie dann set.Kreuzung
Beispiel:
InformationsquelleAutor der Antwort Hypuk