2017-11-24 6 views
0

Ich mache ein paar einfache Experimente mit Python-Sets.
Ich bemerkte dieses seltsame Verhalten (zumindest für mich).Python-Set {} ist nicht gleich gesetzt ([]), warum?

>>> {1,2,3} == set([1,2,3]) 
True 
>>> {1} == set([1]) 
True 
>>> {} == set([]) 
False 
>>> 

Warum das letzte ist False sagen?
Ich finde es eher unlogisch.

Gibt es einen guten Grund dafür?

+0

Nun, ob der Grund ist "gut" oder nicht ist eine Frage der Meinung, aber man könnte sagen, der Grund ist "pragmatisch", weil Wörterbücher häufiger als Sätze verwendet werden. :) –

Antwort

8

{} erstellt ein leeres Wörterbuch, kein Satz.

Es gibt kein leeres Literal, verwenden Sie einfach set() (keine Argumente).

Vom official Python tutorial on sets:

Curly Klammern oder die set() Funktion kann verwendet werden, Sätze zu erstellen. Hinweis: Um einen leeren Satz zu erstellen, müssen Sie set(), nicht {}; Letzteres erstellt ein leeres Wörterbuch, eine Datenstruktur, die wir im nächsten Abschnitt diskutieren.

und vom set displays section der Ausdrücke Referenz-Dokumentation:

Ein leerer Satz mit {} nicht aufgebaut werden kann; Dieses Literal erstellt ein leeres Wörterbuch.

Sätze sind eine relativ späte Ergänzung der Sprache; Verwenden {elem1, elem2} zum Erstellen eines Satzes wurde nur in Python 3 eingeführt und zu Python 2 in Python 2.7 hinzugefügt, aber {} wurde für leere Wörterbücher für verwendet, weit, viel länger, mindestens so früh wie 0.9.2 (veröffentlicht 1991).

+1

Danke ... Jetzt sehe ich ... Der folgende gibt True zurück, also ist alles gut, ich denke '{x für x in []} == set ([])' –

+0

@ peter.petrov: es gibt Keine Notwendigkeit, eine leere Liste zu übergeben, verwenden Sie einfach 'set()'. –