Ajouter des valeurs à un ensemble en Python


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.


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".


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


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)

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


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.


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

Ou

keep.update(np.arange(11))

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.