Verwenden Sie geschweifte Klammern, um ein Set in Python zu initialisieren


97

Ich lerne Python und habe eine Anfängerfrage zum Initialisieren von Sets. Durch Tests habe ich festgestellt, dass ein Set folgendermaßen initialisiert werden kann:

my_set = {'foo', 'bar', 'baz'}

Gibt es irgendwelche Nachteile, wenn man es auf diese Weise macht, im Gegensatz zu der Standardmethode von:

my_set = set(['foo', 'bar', 'baz'])

oder ist es nur eine Frage des Stils?


2
Die Dokumentation erwähnt es, nur nicht dort. Beachten Sie, dass dies die Dokumentation für ein veraltetes Modul ist. Die realen Sets sind jetzt integriert. Es befindet sich im Dokument "Was ist neu in Python 2.7?" Und wird in der Sprachreferenz kurz beschrieben: docs.python.org/2/reference/expressions.html#set-displays

@delnan Ich verwende Python 2.7, daher habe ich nicht daran gedacht, in den Python 3-Dokumenten nachzuschauen. Der Link, den ich gepostet habe, ist für 2.7, aber das wird seltsamerweise nicht erwähnt.
fvrghl

1
Ich habe seitdem meinen Kommentar bearbeitet, die 2.7 Dokumente erwähnen dies auch. Der Link, den Sie gepostet haben, ist veraltet, ein Relikt der Vergangenheit, falsch, veraltet. Vergessen Sie, dass es existiert, und verwenden Sie stattdessen das, was es Ihnen sagt: docs.python.org/2/library/stdtypes.html#set und docs.python.org/2/library/stdtypes.html#frozenset

@delnan Danke, dass du mir geholfen hast. Ich habe die Frage so bearbeitet, dass ich nicht mehr sage, dass es keine Dokumentation dafür gibt (obwohl es nur wenige Beispiele gibt, die dies online erwähnen).
fvrghl

Für Passanten von: Pycharm warnt vor der Verwendung eines Funktionsaufrufs, wenn ein Literal verwendet werden kann - es kann Leistungsgründe geben - bevorzugen Sie daher die in neuem Code festgelegte
Literalmethode

Antworten:


100

Es gibt zwei offensichtliche Probleme mit der Set-Literal-Syntax:

my_set = {'foo', 'bar', 'baz'}
  1. Es ist nicht vor Python 2.7 verfügbar

  2. Es gibt keine Möglichkeit, eine leere Menge mit dieser Syntax auszudrücken (mit {}erstellt ein leeres Diktat)

Diese können für Sie wichtig sein oder auch nicht.

Der Abschnitt der Dokumente, in dem diese Syntax beschrieben wird, befindet sich hier .


45

Vergleichen Sie auch den Unterschied zwischen {}und set()mit einem einzelnen Wortargument.

>>> a = set('aardvark')
>>> a
{'d', 'v', 'a', 'r', 'k'} 
>>> b = {'aardvark'}
>>> b
{'aardvark'}

aber beides aund bsind natürlich sätze.


4
Deshalb erinnere ich mich set([])lieber an den Mengenkonstruktor als nur daran set().
Michael Ekoka

3
set()Nimm immer ein einziges Argument. Eine einzige iterable.
George Kettleborough

1
@ GeorgeKettleborough ein einzelnes oder keine Argumente, letztere, um eine leere Menge zu erstellen.
Gertvdijk

28

Aus der Python 3-Dokumentation ( dasselbe gilt für Python 2.7 ):

Mit geschweiften Klammern oder der Funktion set () können Sätze erstellt werden. Hinweis: Um eine leere Menge zu erstellen, müssen Sie set () verwenden, nicht {}; Letzteres erstellt ein leeres Wörterbuch, eine Datenstruktur, die wir im nächsten Abschnitt behandeln.

in Python 2.7:

>>> my_set = {'foo', 'bar', 'baz', 'baz', 'foo'}
>>> my_set
set(['bar', 'foo', 'baz'])

Beachten Sie, dass dies {}auch für map/ verwendet wird dict:

>>> m = {'a':2,3:'d'}
>>> m[3]
'd'
>>> m={}
>>> type(m)
<type 'dict'> 

Man kann auch eine umfassende Syntax verwenden, um Mengen zu initialisieren:

>>> a = {x for x in """didn't know about {} and sets """ if x not in 'set' }
>>> a
set(['a', ' ', 'b', 'd', "'", 'i', 'k', 'o', 'n', 'u', 'w', '{', '}'])

1

Sie müssen empty_set = set()einen leeren Satz initialisieren. {}Ich bin leer dictionaty.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.