Gunakan tanda kurung kurawal untuk menginisialisasi Set dengan Python


98

Saya belajar python, dan saya punya pertanyaan pemula tentang menginisialisasi set. Melalui pengujian, saya telah menemukan bahwa satu set dapat diinisialisasi seperti ini:

my_set = {'foo', 'bar', 'baz'}

Apakah ada kerugian melakukannya dengan cara ini, yang bertentangan dengan cara standar:

my_set = set(['foo', 'bar', 'baz'])

atau hanya soal gaya?


2
Dokumentasi menyebutkannya, hanya saja tidak ada. Perhatikan bahwa itu dokumentasi untuk modul usang, yang nyata set sekarang builtin. Ada di dokumen "Yang Baru di Python 2.7", dan referensi bahasa menjelaskannya secara singkat: docs.python.org/2/reference/expressions.html#set-displays

@delnan Saya menggunakan python 2.7, jadi saya tidak berpikir untuk mencari di dokumen python 3. Tautan yang saya posting adalah untuk 2.7, tetapi anehnya tidak menyebutkan ini.
fvrghl

1
Saya sejak mengedit komentar saya, 2.7 dokumen juga menyebutkan ini. Link yang Anda posting sudah usang, peninggalan masa lalu, salah, tidak berlaku lagi. Lupakan bahwa itu ada dan gunakan apa yang diperintahkan untuk Anda gunakan sebagai gantinya: docs.python.org/2/library/stdtypes.html#set dan docs.python.org/2/library/stdtypes.html#frozenset

@delnan Terima kasih telah membantu saya. Saya mengedit pertanyaan tersebut sehingga saya tidak lagi mengatakan bahwa tidak ada dokumentasi untuk itu (walaupun ada beberapa contoh yang menyebutkan ini secara online).
fvrghl

Untuk orang yang lewat: Pycharm memperingatkan agar tidak menggunakan panggilan fungsi ketika seseorang dapat menggunakan literal - mungkin ada alasan kinerja - jadi lebih suka cara literal yang ditetapkan dalam kode baru
Mr_and_Mrs_D

Jawaban:


102

Ada dua masalah yang jelas dengan sintaks literal yang ditetapkan:

my_set = {'foo', 'bar', 'baz'}
  1. Ini tidak tersedia sebelum Python 2.7

  2. Tidak ada cara untuk mengekspresikan himpunan kosong menggunakan sintaks itu (menggunakan {}membuat dict kosong)

Itu mungkin penting atau tidak penting bagi Anda.

Bagian dari dokumen yang menguraikan sintaks ini ada di sini .


46

Bandingkan juga perbedaan antara {}dan set()dengan argumen satu kata.

>>> a = set('aardvark')
>>> a
{'d', 'v', 'a', 'r', 'k'} 
>>> b = {'aardvark'}
>>> b
{'aardvark'}

tapi keduanya adan btentu saja adalah set.


4
itulah mengapa saya lebih suka mengingatkan diri saya sendiri tentang set konstruktor set([])daripada hanya set().
Michael Ekoka

3
set()selalu mengambil satu argumen. Satu iterable.
George Kettleborough

1
@GeorgeKettleborough satu atau tanpa argumen, yang terakhir untuk membuat satu set kosong.
gertvdijk

28

Dari dokumentasi Python 3 ( berlaku sama untuk python 2.7 ):

Tanda kurung kurawal atau fungsi set () bisa digunakan untuk membuat set. Catatan: untuk membuat set kosong Anda harus menggunakan set (), bukan {}; yang terakhir membuat kamus kosong, struktur data yang kita bahas di bagian selanjutnya.

dengan python 2.7:

>>> my_set = {'foo', 'bar', 'baz', 'baz', 'foo'}
>>> my_set
set(['bar', 'foo', 'baz'])

Ketahuilah bahwa {}itu juga digunakan untuk map/ dict:

>>> m = {'a':2,3:'d'}
>>> m[3]
'd'
>>> m={}
>>> type(m)
<type 'dict'> 

Anda juga dapat menggunakan sintaks komprehensif untuk menginisialisasi set:

>>> a = {x for x in """didn't know about {} and sets """ if x not in 'set' }
>>> a
set(['a', ' ', 'b', 'd', "'", 'i', 'k', 'o', 'n', 'u', 'w', '{', '}'])

1

Yang perlu Anda lakukan empty_set = set()untuk menginisialisasi set kosong. {}adalah diksi kosong.

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.