2016-03-24 9 views
4

Ich bin dieser Code nicht in der Lage, um herauszufinden, warum nichtPython Set: Warum ist my_set = {* my_list} ungültig?

in Python verwendet funktioniert ist
>>> my_list = [1,2,3,4,5] 
>>> my_set = {*my_list} 
    File "<stdin>", line 1 
    my_set = {*my_list} 
     ^
SyntaxError: invalid syntax 

*args Liste zu entpacken. Meine Erwartung war, dass die obige Operation ein Set erstellen würde, aber das tat es nicht. Können * args und ** kwargs in Python nur als Argumente übergeben werden?

Ich kenne die set() Funktion, aber neugierig, warum diese Syntax nicht funktioniert.

+0

Verwandte (vielleicht dupe): [Erstellen Sie ein Set aus einer Liste mit {}] (http://stackoverflow.com/questions/36198829/create-a-set-from-a-list-using) – GingerPlusPlus

+0

@GingerPlusPlus : Es ist in der Tat ähnlich. Allerdings würde ich sagen, dass meine Frage dort als Antwort dienen würde, wenn wir Python 3.5 verwenden – Sharad

Antwort

6

Dank PEP0448, diesen Tagen ist es tut Arbeit, aber Sie werden auf 3,5 aktualisieren haben:

>>> my_list = [1,2,3,4,5] 
>>> my_set = {*my_list} 
>>> my_set 
{1, 2, 3, 4, 5} 

Das heißt, set(my_list) die offensichtliche Art und Weise ist, eine Liste zu einem Satz zu konvertieren, und So ist es die Art und Weise, wie Sie verwenden sollten.

+0

Danke. Ich kenne Set-Funktion, aber ich war neugierig, warum diese bestimmte Syntax nicht funktioniert hat. Es sah logisch genug aus, um zu funktionieren. – Sharad

0

Es folgt eine Möglichkeit, eine set unter Verwendung einer vordefinierten list

my_list = [1,2,3,4,5] 
my_set = set(my_list) 

Sie *args verwenden würde zu erklären, wenn Sie nicht sicher sind, wie viele Argumente könnten, dh auf Ihre Funktion übergeben werden Es ermöglicht Ihnen, eine beliebige Anzahl von Argumenten an Ihre Funktion zu übergeben.

Abschließend ja - *args ist nur in verwendet Funktion Header vor der Python-Version 3.5.

+0

@cpburnz Ich habe die Antwort aktualisiert. Auch basierend auf dem, was Sie sagen - die akzeptierte Antwort erfüllt auch nicht die Kriterien. –

+0

@SiHa Ich habe die Antwort aktualisiert. Bitte überarbeiten Sie Ihre Down-Abstimmung. –