Ich habe einen list
Dateinamen in Python und möchte set
aus allen Dateinamen einen erstellen.
filelist=[]
for filename in filelist:
set(filename)
Dies scheint nicht zu funktionieren. Wie kann das gehen?
Ich habe einen list
Dateinamen in Python und möchte set
aus allen Dateinamen einen erstellen.
filelist=[]
for filename in filelist:
set(filename)
Dies scheint nicht zu funktionieren. Wie kann das gehen?
Antworten:
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 set
diese 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.add
Methode sehr nützlich ist.
y = set(x)
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)
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.)