Tambahkan nilai ke set di Python

372

Saya memiliki satu set seperti ini:

keep = set(generic_drugs_mapping[drug] for drug in drug_input)

Bagaimana cara menambahkan nilai [0,1,2,3,4,5,6,7,8,9,10]ke set ini?

l --''''''---------------- '' '' '' '' '' '' '
sumber

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.

Alex Martelli
sumber
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".

RandallShanePhD
sumber
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 {...}.

nyuszika7h
sumber
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)
sberry
sumber
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'}.

lalilulelost
sumber
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.

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

Atau

keep.update(np.arange(11))
rishi jain
sumber
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 ...

decadenza
sumber