Hanya ingin menunjukkan hampir semua hal yang mungkin dengan python. Jika Anda ingin membuat set tanpa menggunakan to set (), Anda bisa.
utdemir
6
Ya, Anda dapat melakukan hampir semua hal dalam ratusan cara yang terpadu. Saya tidak menambahkan map(lambda x: x)contoh kode saya hanya untuk menunjukkan itu berfungsi baik. Ini bukan himpunan harfiah juga, itu hanya pemahaman himpunan.
130
Cara bodoh yang berhasil adalah {0}-{0}. Ini tidak sejelas itu set(), tetapi memang memiliki keuntungan terlihat seperti sepasang mata yang lucu.
wim
10
@Chris {}adalah kamus. {0}adalah satu set. {0} - {0}adalah perbedaan antara set dan dirinya sendiri, yang merupakan set kosong.
michaelsnowden
Jawaban:
519
Tidak, tidak ada sintaks literal untuk set kosong. Anda harus menulis set().
Sebenarnya, himpunan literal telah di-backport ke Python 2.7, sehingga tidak hanya tersedia secara ketat dalam Python 3.
Jim Brissom
13
@ Beruntung Itu bukan set kosong - itu set yang berisi angka 1. Anda tidak perlu koma tertinggal - itu hanya diperlukan untuk tupel.
sepp2k
54
Dengan segala cara, silakan gunakanset() untuk membuat set kosong.
Tetapi, jika Anda ingin membuat orang terkesan, katakan kepada mereka bahwa Anda dapat membuat set kosong menggunakan literal dan *dengan Python> = 3.5 ( lihat PEP 448 ) dengan melakukan:
>>> s ={*()}# or {*{}} or {*[]}>>>print(s)
set()
ini pada dasarnya adalah cara yang lebih padat untuk melakukannya {_ for _ in ()}, tetapi, jangan lakukan ini.
Mengapa?! Performa hampir identik:$ python3.7 -m timeit 'set()' 2000000 loops, best of 5: 177 nsec per loop $ python3.7 -m timeit '{*()}' 2000000 loops, best of 5: 171 nsec per loop
oguret
9
@ogurets, set()kemungkinan jauh lebih mudah dipahami (untuk pengelola kode), dan itu seringkali lebih penting daripada kinerja. {*()}tampaknya "pintar" dalam arti yang hampir merendahkan.
benjimin
Heh, itu pintar.
Kowalski
46
Hanya untuk memperluas jawaban yang diterima:
Dari versi 2.7dan 3.1python telah mendapat setliteral {}dalam bentuk penggunaan {1,2,3}, tetapi {}itu sendiri masih digunakan untuk dict kosong.
Python 2.7 (baris pertama tidak valid dalam Python <2.7)
Itu tergantung pada apakah Anda ingin literal untuk perbandingan, atau untuk tugas.
Jika Anda ingin membuat set yang ada kosong, Anda dapat menggunakan .clear()metodenya, terutama jika Anda ingin menghindari membuat objek baru. Jika Anda ingin melakukan perbandingan, gunakan set()atau periksa apakah panjangnya 0.
contoh:
#create a new set
a=set([1,2,3,'foo','bar'])#or, using a literal:
a={1,2,3,'foo','bar'}#create an empty set
a=set()#or, use the clear method
a.clear()#comparison to a new blank setif a==set():#do something#length-checking comparisonif len(a)==0:#do something
a=set()tidak mengosongkan set , tetapi membuat set baru dan menugaskannya a, menimpa nilai sebelumnya.
gerrit
Memang. Itu sebabnya saya mengatakan bahwa jika Anda ingin menghindari membuat objek baru, Anda harus menggunakan clear (). Saya kira komentar saya seharusnya sedikit berbeda.
Brian Minton
Tampaknya juga menggunakan a.clear()metode ini sedikit lebih cepat daripada a=set(), dan memeriksa len(a)==0sedikit lebih cepat daripada memeriksa kesetaraan untuka==set()
Brian Minton
3
Alih-alih if len(a)==0:itu sudah cukup (dan lebih Pythonic) untuk menulis adil if a: (sunting: atau lebih tepatnya, if not a:untuk mencocokkan polaritas kondisi).
Jim Oldfield
2
Menambahkan ke ide-ide gila: dengan Python 3 menerima pengidentifikasi unicode, Anda bisa mendeklarasikan variabel ϕ = frozenset()(ϕ adalah U + 03D5) dan menggunakannya.
Masalahnya adalah, setobjek bisa berubah, jadi Anda menempatkan diri Anda dalam risiko spam = ϕ; spam.add("eggs").
drdaeman
3
jika ϕadalah frozenset, maka spam.add("eggs")gagal, karena objek frozenset tidak memiliki addmetode apa pun .
Brian Minton
1
@BrianMinton: Tapi itu perilaku yang dimaksud. Perhatikan bahwa ketika seseorang menulis span = ϕkeduanya spandan ϕakan menunjuk ke objek yang sama, yaitu id(span) == id(ϕ). Oleh karena itu, jika spam.add("eggs")berhasil, ϕobjek tidak akan menjadi set kosong lagi, dan kita akan kembali ke masalah semula seperti yang ditunjukkan oleh drdaeman
Renato Garcia
1
@RenatoGarcia Bandingkan dengan dict literal kosong:>>> a={} >>> a['foo']='bar' >>> a {'foo': 'bar'}
Brian Minton
1
Iya. Notasi yang sama yang berfungsi untuk dict / set yang tidak kosong berfungsi untuk yang kosong.
Perhatikan perbedaan antara non-kosong dictdan setliteral:
{1: 'a', 2: 'b', 3: 'c'}- sejumlah pasangan kunci-nilai di dalam membuat dict {'aaa', 'bbb', 'ccc'}- a tupel nilai di dalam membuat aset
Begitu:
{}== jumlah pasangan kunci-nilai nol == kosong dict {*()}== jumlah nilai kosong == kosongset
Namun faktanya, bahwa Anda dapat melakukannya, tidak berarti Anda harus melakukannya. Kecuali Anda memiliki alasan kuat, lebih baik membuat set kosong secara eksplisit, seperti:
a = set()
NB : Seperti ctrueden melihat dalam komentar, {()}adalah bukan himpunan kosong. Ini satu set dengan 1 elemen: tuple kosong.
{()}bukan set kosong. Ini adalah satu set tunggal dengan satu elemen: sebuah tuple kosong. Anda dapat memverifikasi ini dengan memeriksa len({()})yang mana akan menjadi 1, atau () in {()}, yang akan menjadi True.
ctrueden
1
Ups, Anda benar! Saya memperbarui posting: menambahkan catatan tentang {()}tidak menjadi set kosong, kalau-kalau ada orang yang membuat kesalahan yang sama. Terima kasih, @ctrueden!
pycoder
-1
Ada beberapa cara untuk membuat Set kosong di Python:
Menggunakan metode set ()
Ini adalah metode bawaan di python yang menciptakan set Kosong di variabel itu.
Menggunakan metode clear () (Teknik Insinyur kreatif LOL)
Lihat Contoh ini:
sets = {"Hai", "How", "is", "You", "All"}
jenis (set) (Output Baris ini: set)
set .clear ()
print (set) (Output Baris Ini: {})
jenis (set) (Output Baris Ini: set)
map(lambda x: x)
contoh kode saya hanya untuk menunjukkan itu berfungsi baik. Ini bukan himpunan harfiah juga, itu hanya pemahaman himpunan.{0}-{0}
. Ini tidak sejelas ituset()
, tetapi memang memiliki keuntungan terlihat seperti sepasang mata yang lucu.{}
adalah kamus.{0}
adalah satu set.{0} - {0}
adalah perbedaan antara set dan dirinya sendiri, yang merupakan set kosong.Jawaban:
Tidak, tidak ada sintaks literal untuk set kosong. Anda harus menulis
set()
.sumber
Dengan segala cara, silakan gunakan
set()
untuk membuat set kosong.Tetapi, jika Anda ingin membuat orang terkesan, katakan kepada mereka bahwa Anda dapat membuat set kosong menggunakan literal dan
*
dengan Python> = 3.5 ( lihat PEP 448 ) dengan melakukan:ini pada dasarnya adalah cara yang lebih padat untuk melakukannya
{_ for _ in ()}
, tetapi, jangan lakukan ini.sumber
$ python3.7 -m timeit 'set()' 2000000 loops, best of 5: 177 nsec per loop $ python3.7 -m timeit '{*()}' 2000000 loops, best of 5: 171 nsec per loop
set()
kemungkinan jauh lebih mudah dipahami (untuk pengelola kode), dan itu seringkali lebih penting daripada kinerja.{*()}
tampaknya "pintar" dalam arti yang hampir merendahkan.Hanya untuk memperluas jawaban yang diterima:
Dari versi
2.7
dan3.1
python telah mendapatset
literal{}
dalam bentuk penggunaan{1,2,3}
, tetapi{}
itu sendiri masih digunakan untuk dict kosong.Python 2.7 (baris pertama tidak valid dalam Python <2.7)
Python 3.x
Lebih lanjut di sini: https://docs.python.org/3/whatsnew/2.7.html#other-language-changes
sumber
{}.__class__
akan tetap memberidict
{}.__class__
kembali<class 'dict'>'
dengan pyt3.6, tidak<type 'dict'>
Itu tergantung pada apakah Anda ingin literal untuk perbandingan, atau untuk tugas.
Jika Anda ingin membuat set yang ada kosong, Anda dapat menggunakan
.clear()
metodenya, terutama jika Anda ingin menghindari membuat objek baru. Jika Anda ingin melakukan perbandingan, gunakanset()
atau periksa apakah panjangnya 0.contoh:
sumber
a=set()
tidak mengosongkan set , tetapi membuat set baru dan menugaskannyaa
, menimpa nilai sebelumnya.a.clear()
metode ini sedikit lebih cepat daripadaa=set()
, dan memeriksalen(a)==0
sedikit lebih cepat daripada memeriksa kesetaraan untuka==set()
if len(a)==0:
itu sudah cukup (dan lebih Pythonic) untuk menulis adilif a:
(sunting: atau lebih tepatnya,if not a:
untuk mencocokkan polaritas kondisi).Menambahkan ke ide-ide gila: dengan Python 3 menerima pengidentifikasi unicode, Anda bisa mendeklarasikan variabel
ϕ = frozenset()
(ϕ adalah U + 03D5) dan menggunakannya.sumber
set
objek bisa berubah, jadi Anda menempatkan diri Anda dalam risikospam = ϕ; spam.add("eggs")
.ϕ
adalah frozenset, makaspam.add("eggs")
gagal, karena objek frozenset tidak memilikiadd
metode apa pun .span = ϕ
keduanyaspan
danϕ
akan menunjuk ke objek yang sama, yaituid(span) == id(ϕ)
. Oleh karena itu, jikaspam.add("eggs")
berhasil,ϕ
objek tidak akan menjadi set kosong lagi, dan kita akan kembali ke masalah semula seperti yang ditunjukkan oleh drdaeman>>> a={} >>> a['foo']='bar' >>> a {'foo': 'bar'}
Iya. Notasi yang sama yang berfungsi untuk dict / set yang tidak kosong berfungsi untuk yang kosong.
Perhatikan perbedaan antara non-kosong
dict
danset
literal:{1: 'a', 2: 'b', 3: 'c'}
- sejumlah pasangan kunci-nilai di dalam membuatdict
{'aaa', 'bbb', 'ccc'}
- a tupel nilai di dalam membuat aset
Begitu:
{}
== jumlah pasangan kunci-nilai nol == kosongdict
{*()}
== jumlah nilai kosong == kosongset
Namun faktanya, bahwa Anda dapat melakukannya, tidak berarti Anda harus melakukannya. Kecuali Anda memiliki alasan kuat, lebih baik membuat set kosong secara eksplisit, seperti:
NB : Seperti ctrueden melihat dalam komentar,
{()}
adalah bukan himpunan kosong. Ini satu set dengan 1 elemen: tuple kosong.sumber
{()}
bukan set kosong. Ini adalah satu set tunggal dengan satu elemen: sebuah tuple kosong. Anda dapat memverifikasi ini dengan memeriksalen({()})
yang mana akan menjadi 1, atau() in {()}
, yang akan menjadiTrue
.{()}
tidak menjadi set kosong, kalau-kalau ada orang yang membuat kesalahan yang sama. Terima kasih, @ctrueden!Ada beberapa cara untuk membuat Set kosong di Python:
Ini adalah metode bawaan di python yang menciptakan set Kosong di variabel itu.
Lihat Contoh ini:
sets = {"Hai", "How", "is", "You", "All"}
jenis (set) (Output Baris ini: set)
set .clear ()
print (set) (Output Baris Ini: {})
jenis (set) (Output Baris Ini: set)
Jadi, Ini adalah 2 cara untuk membuat Set kosong.
sumber