Wie erstelle ich einen Satz aus Listenelementen in Python?


170

Ich habe einen listDateinamen in Python und möchte setaus allen Dateinamen einen erstellen.

filelist=[]
for filename in filelist:
    set(filename)

Dies scheint nicht zu funktionieren. Wie kann das gehen?

Antworten:


322

Wenn Sie eine Liste von hashbaren Objekten haben (Dateinamen wären wahrscheinlich Zeichenfolgen, daher sollten sie zählen):

lst = ['foo.py', 'bar.py', 'baz.py', 'qux.py', Ellipsis]

Sie können das Set direkt erstellen:

s = set(lst)

Funktioniert auf setdiese Weise mit jedem iterierbaren Objekt! (Tippt Ente nicht großartig?)


Wenn Sie es iterativ tun möchten:

s = set()
for item in iterable:
    s.add(item)

Aber es besteht selten die Notwendigkeit, dies so zu tun. Ich erwähne es nur, weil die set.addMethode sehr nützlich ist.


1
Ich benutze 2.7 und das scheint nicht zu funktionieren. Was ist denn hier los? Python 2.7.13 (Standard, 24. Juli 2017, 14:22:59) [GCC 4.2.1-kompatibles Apple LLVM 8.1.0 (clang-802.0.42)] auf Darwin Geben Sie "help", "copyright", "Credits" ein. oder "Lizenz" für weitere Informationen. >>> x = [1,2,3] >>> set (x) set ([1, 2, 3]) >>>
opus111

@ user1902291-- Es sieht so aus, als ob es funktioniert hat. Sie müssen nur den Überblick über die resultierende Menge behalten: y = set(x)
mgilson

Beachten Sie auch, dass sich das Hinzufügen von Elementen aus einer Liste zum Set als sehr nützlich erweisen kann, wenn Sie Duplikate aus der Liste herausfiltern möchten.
Pranjal Kumar

12

Die direkteste Lösung ist folgende:

 s = set(filelist)

Das Problem in Ihrem ursprünglichen Code ist, dass die Werte dem Satz nicht zugewiesen wurden . Hier ist die reparierte Version Ihres Codes:

 s = set()
 for filename in filelist:
     s.add(filename)
 print(s)

9

Du kannst tun

my_set = set(my_list)

oder für Python 3

my_set = {*my_list}

um einen Satz aus einer Liste zu erstellen. Umgekehrt können Sie auch tun

my_list = list(my_set)

oder für Python 3

my_list = [*my_set]

um eine Liste aus einem Satz zu erstellen.

Beachten Sie nur, dass die Reihenfolge der Elemente in einer Liste beim Konvertieren der Liste in eine Menge im Allgemeinen verloren geht, da eine Menge von Natur aus ungeordnet ist. (Eine Ausnahme in CPython scheint jedoch zu sein, wenn die Liste nur aus nicht negativen Ganzzahlen besteht. Ich gehe jedoch davon aus, dass dies eine Folge der Implementierung von Mengen in CPython ist und dass dieses Verhalten zwischen verschiedenen Python-Implementierungen variieren kann.)


4

Hier ist eine andere Lösung:

>>>list1=["C:\\","D:\\","E:\\","C:\\"]
>>>set1=set(list1)
>>>set1
set(['E:\\', 'D:\\', 'C:\\'])

In diesem Code habe ich die set-Methode verwendet, um daraus eine Menge zu machen, und dann alle doppelten Werte aus der Liste entfernt


1

Eine allgemeine Möglichkeit, eine Menge iterativ wie folgt zu konstruieren:

aset = {e for e in alist}

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.