Ajouter des valeurs à un ensemble en Python

372

J'ai un ensemble comme celui-ci:

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

Comment ajouter des valeurs [0,1,2,3,4,5,6,7,8,9,10]à cet ensemble?

l --''''''----------------- '' '' '' '' '' ''
la source

Réponses:

405
keep.update(yoursequenceofvalues)

par exemple, keep.update(xrange(11))pour votre exemple spécifique. Ou, si vous devez produire les valeurs dans une boucle pour une autre raison,

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

Mais, bien sûr, le faire en masse avec un seul .updateappel est plus rapide et plus pratique, lorsque cela est possible.

Alex Martelli
la source
78
.addajoute un seul élément, .updateajoute plusieurs éléments. Est-ce exact?
ThorSummoner
16
@ThorSummoner Oui, .addattend un seul type lavable, tout en .updateattend un objet itérable
Bonnie
4
Si vous ajoutez une chaîne avec mise à jour, cela ajoutera un élément par caractère dans votre chaîne car c'est un itérable!
hgolov
2
Il est en effet important de noter que les chaînes, en tant qu'objets "entiers", devraient être ajoutées avec .add, non .update, j'ai récemment fait face à un bug assez sournois à cause de ce petit détail.
lalilulelost
278

Définir l'ensemble

a = set()

Utilisez ajouter pour ajouter des valeurs uniques

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

Utilisez la mise à jour pour ajouter des éléments à partir de tuples, d'ensembles, de listes ou d'ensembles figés

a.update([3,4])

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

Si vous souhaitez ajouter un tuple ou un ensemble figé, utilisez add

a.add((5, 6))

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

Remarque: Étant donné que les éléments d'ensemble doivent être lavables et que les listes sont considérées comme modifiables, vous ne pouvez pas ajouter de liste à un ensemble. Vous ne pouvez pas non plus ajouter d'autres ensembles à un ensemble. Vous pouvez cependant ajouter les éléments des listes et des ensembles comme illustré avec la méthode ".update".

RandallShanePhD
la source
105

Vous pouvez également utiliser l' |opérateur pour concaténer deux ensembles ( union dans la théorie des ensembles):

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

Ou un formulaire plus court utilisant |=:

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

Remarque: dans les versions antérieures à Python 2.7, utilisez set([...])plutôt que {...}.

nyuszika7h
la source
1
Si vous avez une liste d'ensembles my_sets, alors vous pouvez les big_set = my_sets[0].union(*my_sets[1:])combiner tous
zelusp
45

Utilisez updatecomme ceci:

keep.update(newvalues)
sberry
la source
10

Cette question est la première qui apparaît sur Google lorsque l'on recherche "Python comment ajouter des éléments à un ensemble", il convient donc de noter explicitement que si vous souhaitez ajouter une chaîne entière à un ensemble, elle doit être ajoutée avec .add(), non .update().

Disons que vous avez une chaîne foo_strdont le contenu est 'this is a sentence', et que vous en avez un ensemble bar_setégal àset() .

Si vous le faites bar_set.update(foo_str), le contenu de votre ensemble sera {'t', 'a', ' ', 'e', 's', 'n', 'h', 'c', 'i'}.

Si vous le faites bar_set.add(foo_str), le contenu de votre ensemble sera {'this is a sentence'}.

lalilulelost
la source
3

La façon dont j'aime faire cela est de convertir à la fois l'ensemble d'origine et les valeurs que j'aimerais ajouter dans des listes, de les ajouter, puis de les reconvertir en un ensemble, comme ceci:

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

De cette façon, je peux également ajouter facilement plusieurs ensembles en utilisant la même logique, ce qui m'obtient TypeError: unhashable type: 'set'si j'essaie de le faire avec la .update()méthode.

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

Ou

keep.update(np.arange(11))
rishi jain
la source
0

Pour moi, en Python 3, cela fonctionne simplement de cette façon:

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

Je ne sais pas si c'est peut-être correct ...

decadenza
la source