Hoe maak je een set van lijstitems in python?

Ik heb een listmet bestandsnamen in python en ik zou een setwillen maken van alle bestandsnamen.

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

Dit lijkt niet te werken. Hoe kan dit?


Antwoord 1, autoriteit 100%

Als je een lijst met hash-objecten hebt (bestandsnamen zijn waarschijnlijk strings, dus ze zouden moeten tellen):

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

u kunt de set direct samenstellen:

s = set(lst)

In feite werkt setop deze manier met elk itereerbaar object!(Is duck-typen niet geweldig?)


Als je het iteratief wilt doen:

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

Maar het is zelden nodig om het op deze manier te doen. Ik vermeld het alleen omdat de methode set.addbest handig is.


Antwoord 2, autoriteit 4%

De meest directe oplossing is deze:

s = set(filelist)

Het probleem in uw oorspronkelijke code is dat de waarden niet werden toegewezen aan de set. Dit is de verbeterde versie van je code:

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

Antwoord 3, autoriteit 3%

Je kunt doen

my_set = set(my_list)

of, in Python 3,

my_set = {*my_list}

om een set van een lijst te maken. Omgekeerd kun je ook

my_list = list(my_set)

of, in Python 3,

my_list = [*my_set]

om een lijst te maken van een set.

Houd er rekening mee dat de volgorde van de elementen in een lijst over het algemeen verloren gaat bij het converteren van de lijst naar een set, omdat een set inherent ongeordend is. (Een uitzondering in CPython lijkt echter te zijn als de lijst alleen uit niet-negatieve gehele getallen bestaat, maar ik neem aan dat dit een gevolg is van de implementatie van sets in CPython en dat dit gedrag kan variëren tussen verschillende Python-implementaties.)


Antwoord 4

Hier is een andere oplossing:

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

In deze code heb ik de set-methode gebruikt om er een set van te maken en vervolgens alle dubbele waarden uit de lijst verwijderd


Antwoord 5

Zet gewoon de regel:

new_list = set(your_list)

Antwoord 6

Een algemene manier om set op iteratieve manier als volgt te construeren:

aset = {e for e in alist}

Antwoord 7

Je kunt ook lijstbegrip gebruiken om een set te maken.

s = {i for i in range(5)}

Other episodes