Bagaimana cara membangun satu set daftar item dalam python?


170

Saya memiliki listnama file dengan python dan saya ingin membuat setsemua nama file.

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

Ini sepertinya tidak berhasil. Bagaimana ini bisa dilakukan?

Jawaban:


322

Jika Anda memiliki daftar objek hashable (nama file mungkin adalah string, jadi mereka harus menghitung):

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

Anda dapat membangun set secara langsung:

s = set(lst)

Bahkan, setakan bekerja seperti ini dengan objek yang dapat diubah! (Bukankah mengetik bebek bagus?)


Jika Anda ingin melakukannya berulang-ulang:

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

Tetapi jarang ada kebutuhan untuk melakukannya dengan cara ini. Saya hanya menyebutkannya karena set.addmetode ini cukup berguna.


1
Saya menggunakan 2.7 dan ini sepertinya tidak berhasil. Apa yang terjadi di sini? Python 2.7.13 (default, 24 Juli 2017, 14:22:59) [GCC 4.2.1 Kompatibel dengan Apple LLVM 8.1.0 (clang-802.0.42)] pada darwin Ketik "help", "hak cipta", "kredit" atau "lisensi" untuk informasi lebih lanjut. >>> x = [1,2,3] >>> set (x) set ([1, 2, 3]) >>>
opus111

@ user1902291-- Sepertinya itu berfungsi, Anda hanya perlu untuk melacak set yang dihasilkan: y = set(x)
mgilson

Perhatikan juga bahwa menambahkan item dalam set dari daftar dapat terbukti sangat berguna ketika Anda ingin menyaring duplikat dari daftar.
Pranjal Kumar

12

Solusi paling langsung adalah ini:

 s = set(filelist)

Masalah dalam kode asli Anda adalah bahwa nilai tidak ditugaskan ke set . Inilah versi kode Anda yang diperbaiki:

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

9

Anda dapat melakukan

my_set = set(my_list)

atau, untuk Python 3,

my_set = {*my_list}

untuk membuat satu set dari daftar. Sebaliknya, Anda juga bisa melakukannya

my_list = list(my_set)

atau, untuk Python 3,

my_list = [*my_set]

untuk membuat daftar dari suatu set.

Perhatikan bahwa urutan elemen dalam daftar umumnya hilang saat mengonversi daftar ke set karena set secara inheren tidak terurut. (Satu pengecualian dalam CPython, meskipun, tampaknya jika daftar hanya terdiri dari bilangan bulat non-negatif, tapi saya menganggap ini adalah konsekuensi dari implementasi set di CPython dan bahwa perilaku ini dapat bervariasi antara implementasi Python yang berbeda.)


4

Ini solusi lain:

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

Dalam kode ini saya telah menggunakan metode set untuk mengubahnya menjadi set dan kemudian menghapus semua nilai duplikat dari daftar


1

Salah satu cara umum untuk membangun set secara iteratif seperti ini:

aset = {e for e in alist}

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.