Jak skonstruować zestaw elementów listy w Pythonie?

170

Mam listnazwę plików w pythonie i chciałbym utworzyć jedną setz nazw plików.

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

To nie wydaje się działać. Jak to zrobić?

bezpieczne kodowanie
źródło

Odpowiedzi:

322

Jeśli masz listę obiektów, które można mieszać (nazwy plików byłyby prawdopodobnie łańcuchami, więc powinny się liczyć):

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

możesz skonstruować zestaw bezpośrednio:

s = set(lst)

W rzeczywistości setbędzie działać w ten sposób z każdym iterowalnym obiektem! (Czy pisanie kaczki nie jest świetne?)


Jeśli chcesz to zrobić iteracyjnie:

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

Ale rzadko trzeba to robić w ten sposób. Wspominam o tym tylko dlatego, że set.addmetoda jest całkiem przydatna.

mgilson
źródło
1
Używam wersji 2.7 i to nie działa. Co tu się dzieje? Python 2.7.13 (domyślnie, 24 lipca 2017, 14:22:59) [Zgodny z GCC 4.2.1 Apple LLVM 8.1.0 (clang-802.0.42)] na darwin Wpisz „pomoc”, „prawa autorskie”, „kredyty” lub „licencja”, aby uzyskać więcej informacji. >>> x = [1,2,3] >>> set (x) set ([1, 2, 3]) >>>
opus111
@ user1902291 - Wygląda na to, że zadziałało, po prostu chcesz śledzić wynikowy zestaw: y = set(x)
mgilson
Zauważ również, że dodawanie elementów do zestawu z listy może okazać się bardzo przydatne, gdy chcesz odfiltrować duplikaty z listy.
Pranjal Kumar,
12

Najbardziej bezpośrednim rozwiązaniem jest to:

 s = set(filelist)

Problem z oryginalnym kodem polega na tym, że wartości nie zostały przypisane do zestawu . Oto poprawiona wersja Twojego kodu:

 s = set()
 for filename in filelist:
     s.add(filename)
 print(s)
Raymond Hettinger
źródło
9

Możesz to zrobić

my_set = set(my_list)

lub, w przypadku Pythona 3,

my_set = {*my_list}

stworzyć zestaw z listy. I odwrotnie, możesz też to zrobić

my_list = list(my_set)

lub, w przypadku Pythona 3,

my_list = [*my_set]

stworzyć listę z zestawu.

Zwróć uwagę, że kolejność elementów na liście jest generalnie tracona podczas konwertowania listy na zestaw, ponieważ zestaw jest z natury nieuporządkowany. (Jedynym wyjątkiem w CPythonie wydaje się być sytuacja, w której lista składa się tylko z nieujemnych liczb całkowitych, ale zakładam, że jest to konsekwencja implementacji zestawów w CPythonie i to zachowanie może się różnić w różnych implementacjach Pythona).

Cześć Żegnaj
źródło
4

Oto inne rozwiązanie:

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

W tym kodzie użyłem metody set, aby przekształcić ją w zestaw, a następnie usunąłem wszystkie zduplikowane wartości z listy

Adi Ml
źródło
1

Jeden ogólny sposób konstruowania zestawu w iteracyjny sposób:

aset = {e for e in alist}
lbsweek
źródło
0

Po prostu umieść wiersz:

new_list = set(your_list)
muknerd
źródło