Tambahkan nilai ke set di Python


Jawaban:


405
keep.update(yoursequenceofvalues)

misalnya, keep.update(xrange(11))untuk contoh spesifik Anda. Atau, jika Anda harus menghasilkan nilai dalam satu lingkaran untuk beberapa alasan lain,

for ...whatever...:
  onemorevalue = ...whatever...
  keep.add(onemorevalue)

Tetapi, tentu saja, melakukannya secara massal dengan satu .updatepanggilan lebih cepat dan lebih mudah, jika sebaliknya layak dilakukan.


78
.addmenambahkan satu item, .updatemenambahkan beberapa item. Apakah itu benar?
ThorSummoner

16
@ThorSummoner Ya, .addmengharapkan satu jenis hashable, sementara .updatemengharapkan objek yang dapat diubah
Bonnie

4
Jika Anda menambahkan string dengan pembaruan, itu akan menambahkan satu item per karakter di string Anda karena itu dapat diubah!
hgolov

2
Memang penting untuk dicatat bahwa string, sebagai objek "utuh", harus ditambahkan .add, bukan .update, saya baru-baru ini menghadapi bug yang licik karena detail kecil ini.
lalilulelost

278

Tentukan set

a = set()

Gunakan tambah untuk menambahkan nilai tunggal

a.add(1)
a.add(2)

Gunakan pembaruan untuk menambahkan elemen dari tupel, set, daftar atau set-beku

a.update([3,4])

>> print(a)
{1, 2, 3, 4}

Jika Anda ingin menambahkan tuple atau set beku, gunakan add

a.add((5, 6))

>> print(a)
{1, 2, 3, 4, (5, 6)}

Catatan: Karena elemen set harus hashable, dan daftar dianggap bisa berubah, Anda tidak bisa menambahkan daftar ke set. Anda juga tidak bisa menambahkan set lain ke set. Namun Anda dapat, menambahkan elemen dari daftar dan set seperti yang ditunjukkan dengan metode ".update".


105

Anda juga dapat menggunakan |operator untuk menggabungkan dua set ( gabungan dalam teori set):

>>> my_set = {1}
>>> my_set = my_set | {2}
>>> my_set
{1, 2}

Atau formulir yang lebih pendek menggunakan |=:

>>> my_set = {1}
>>> my_set |= {2}
>>> my_set
{1, 2}

Catatan: Dalam versi sebelum Python 2.7, gunakan set([...])sebagai ganti {...}.


1
Jika Anda memiliki daftar set my_sets, maka Anda dapat melakukannya big_set = my_sets[0].union(*my_sets[1:])untuk menggabungkan semuanya
zelusp

45

Gunakan updateseperti ini:

keep.update(newvalues)

10

Pertanyaan ini adalah yang pertama yang muncul di Google ketika seseorang mencari "Python cara menambahkan elemen ke set", jadi perlu dicatat secara eksplisit bahwa, jika Anda ingin menambahkan seluruh string ke set, harus ditambahkan dengan .add(), tidak .update().

Katakanlah Anda memiliki string foo_stryang isinya 'this is a sentence', dan Anda memiliki beberapa set yang bar_setsama dengan set().

Jika Anda melakukannya bar_set.update(foo_str), isi set Anda akan menjadi {'t', 'a', ' ', 'e', 's', 'n', 'h', 'c', 'i'}.

Jika Anda melakukannya bar_set.add(foo_str), isi set Anda akan menjadi {'this is a sentence'}.


3

Cara saya ingin melakukan ini adalah untuk mengubah set asli dan nilai-nilai yang ingin saya tambahkan ke dalam daftar, menambahkannya, dan kemudian mengubahnya kembali menjadi set, seperti ini:

setMenu = {"Eggs", "Bacon"}
print(setMenu)
> {'Bacon', 'Eggs'}
setMenu = set(list(setMenu) + list({"Spam"}))
print(setMenu)
> {'Bacon', 'Spam', 'Eggs'}
setAdditions = {"Lobster", "Sausage"}
setMenu = set(list(setMenu) + list(setAdditions))
print(setMenu)
> {'Lobster', 'Spam', 'Eggs', 'Sausage', 'Bacon'}

Dengan cara ini saya juga dapat dengan mudah menambahkan beberapa set menggunakan logika yang sama, yang membuat saya dan TypeError: unhashable type: 'set'jika saya mencoba melakukannya dengan .update()metode ini.


2
keep.update((0,1,2,3,4,5,6,7,8,9,10))

Atau

keep.update(np.arange(11))

0

Bagi saya, dalam Python 3, ini berfungsi sederhana dengan cara ini:

keep = keep.union((0,1,2,3,4,5,6,7,8,9,10))

Saya tidak tahu apakah itu benar ...

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.