2016-03-24 4 views
2

Manchmal habe ich eine Liste und ich möchte einige Set-Aktionen damit machen. Was ich tue, ist zu schreiben, Dinge wie:Erstellen Sie ein Set aus einer Liste mit {}

>>> mylist = [1,2,3] 
>>> myset = set(mylist) 
{1, 2, 3} 

Heute habe ich entdeckt, dass von Python 2.7 auch eine Reihe von direkt sagen {1,2,3} definieren kann, und es erscheint eine gleichwertige Art und Weise, es zu definieren.

Dann fragte ich mich, ob ich diese Syntax verwenden kann, um eine Menge aus einer gegebenen Liste zu erstellen.

{list} schlägt fehl, weil es versucht, einen Satz mit nur einem Element, der Liste zu erstellen. Und Listen sind nicht hashbar.

>>> mylist = [1,2,3] 
>>> {mylist} 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unhashable type: 'list' 

So frage ich mich: mit der {} Syntax statt set() ist es eine Möglichkeit, einen Satz aus einer Liste zu erstellen?

+8

'{a für eine in my_list}'. –

+1

Die kurze Antwort auf Ihre Frage ist nein. –

+0

Zugehörig (vielleicht dupe): [Python Set: Warum ist my_set = {* my_list} ungültig?] (Http://stackoverflow.com/q/36199066/3821804) – GingerPlusPlus

Antwort

2

ich eine ähnliche Frage verwenden kürzlich gefragt: Python Set: why is my_set = {*my_list} invalid?. Meine Frage enthält die Antwort, wenn Sie Python verwenden 3,5

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

Es wird auf Python nicht funktionieren 2 (das war meine Frage)

4

Grundsätzlich sind sie nicht äquivalent (Ausdruck gegen Funktion). Der Hauptzweck des Hinzufügens {} zu Python war wegen Satz Verständnis (wie list comprehension), die Sie auch erstellen können, indem Sie einige hashable Objekte übergeben.

Also, wenn Sie einen Satz mit {} von einem iterable erstellen möchten, können Sie eine Menge Verständnis wie folgt verwendet werden:

{item for item in iterable} 

Beachten Sie auch, dass leere Klammern ein Wörterbuch in Python nicht eine Reihe darstellen. Wenn Sie also nur einen leeren Satz erstellen möchten, verwenden Sie die Funktion set().

1

können Sie

>>> ls = [1,2,3] 
>>> {i for i in ls} 
{1,2,3}