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?

Securecoding
sumber

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.

mgilson
sumber
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)
Raymond Hettinger
sumber
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.)

Halo selamat tinggal
sumber
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

Adi Ml
sumber
1

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

aset = {e for e in alist}
lbsweek
sumber
0

Sederhananya:

new_list = set(your_list)
Muknerd
sumber