Dołącz wartości do zestawu w Pythonie

372

Mam taki zestaw:

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

Jak dodać wartości [0,1,2,3,4,5,6,7,8,9,10]do tego zestawu?

l - '' '' ---------- '' '' '' '
źródło

Odpowiedzi:

405
keep.update(yoursequenceofvalues)

np. keep.update(xrange(11))dla twojego konkretnego przykładu. Albo, jeśli masz do wytworzenia wartości w pętli z jakiegoś innego powodu,

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

Ale oczywiście robienie tego zbiorczo za pomocą pojedynczego .updatepołączenia jest szybsze i wygodniejsze, jeśli jest to wykonalne w inny sposób.

Alex Martelli
źródło
78
.adddodaje jeden element, .updatedodaje kilka elementów. Czy to jest poprawne?
ThorSummoner,
16
@ThorSummoner Tak, .addoczekuje pojedynczego typu skrótu, podczas gdy .updateoczekuje obiektu iterowalnego
Bonnie
4
Jeśli dodasz ciąg z aktualizacją, doda jeden element na znak w ciągu, ponieważ jest iterowalny!
hgolov
2
Rzeczywiście ważne jest, aby pamiętać, że ciągi jako „całe” obiekty powinny być dodawane .add, a nie .update, ostatnio spotkałem się z dość podstępnym błędem z powodu tego małego szczegółu.
lalilulelost
276

Zdefiniuj zestaw

a = set()

Użyj add, aby dołączyć pojedyncze wartości

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

Użyj aktualizacji, aby dodać elementy z krotek, zestawów, list lub zestawów zamrożonych

a.update([3,4])

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

Jeśli chcesz dodać krotkę lub sam zestaw zamrożony, użyj add

a.add((5, 6))

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

Uwaga: Ponieważ elementy zestawu muszą być haszowalne, a listy są uważane za zmienne, nie można dodać listy do zestawu. Nie można również dodawać innych zestawów do zestawu. Można jednak dodawać elementy z list i zestawów, jak pokazano za pomocą metody „.update”.

RandallShanePhD
źródło
105

Możesz także użyć |operatora do połączenia dwóch zbiorów ( połączenie w teorii zbiorów):

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

Lub krótszy formularz przy użyciu |=:

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

Uwaga: W wersjach wcześniejszych niż Python 2.7 użyj set([...])zamiast {...}.

nyuszika7h
źródło
1
Jeśli masz listę zestawów my_sets, możesz big_set = my_sets[0].union(*my_sets[1:])połączyć je wszystkie
zelusp,
45

Użyj w updateten sposób:

keep.update(newvalues)
jagoda
źródło
10

To pytanie jest pierwszym, które pojawia się w Google, gdy szuka się „Pythona, jak dodawać elementy do zestawu”, dlatego warto wyraźnie zaznaczyć, że jeśli chcesz dodać cały ciąg do zestawu, należy dodać .add(): nie .update().

Załóżmy, że masz ciąg znaków, foo_strktórego zawartość jest 'this is a sentence', i masz zestaw bar_setrówny set().

Jeśli to zrobisz bar_set.update(foo_str), zawartość Twojego zestawu będzie {'t', 'a', ' ', 'e', 's', 'n', 'h', 'c', 'i'}.

Jeśli to zrobisz bar_set.add(foo_str), zawartość Twojego zestawu będzie {'this is a sentence'}.

lalilulelost
źródło
3

Lubię to przekonwertować zarówno oryginalny zestaw, jak i wartości, które chciałbym dodać do list, dodać je, a następnie przekonwertować z powrotem na zestaw, jak poniżej:

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'}

W ten sposób mogę również łatwo dodawać wiele zestawów przy użyciu tej samej logiki, co daje TypeError: unhashable type: 'set'mi i próbę zrobienia tego za pomocą .update()metody.

Kira Resari
źródło
2
keep.update((0,1,2,3,4,5,6,7,8,9,10))

Lub

keep.update(np.arange(11))
rishi jain
źródło
0

Dla mnie w Pythonie 3 działa on w następujący sposób:

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

Nie wiem czy to może być poprawne ...

decadenza
źródło