Agregar valores a un conjunto en Python

372

Tengo un conjunto como este:

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

¿Cómo agrego valores [0,1,2,3,4,5,6,7,8,9,10]a este conjunto?

l --''''''--------- '' '' '' '' '' ''
fuente

Respuestas:

405
keep.update(yoursequenceofvalues)

Por ejemplo, keep.update(xrange(11))para su ejemplo específico. O, si tiene que producir los valores en un bucle por alguna otra razón,

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

Pero, por supuesto, hacerlo de forma masiva con una sola .updatellamada es más rápido y práctico, cuando es factible.

Alex Martelli
fuente
78
.addagrega un solo elemento, .updateagrega varios elementos. ¿Es eso correcto?
ThorSummoner
16
@ThorSummoner Sí, .addespera un solo tipo hashable, mientras .updateespera un objeto iterable
Bonnie
44
Si agrega una cadena con actualización, agregará un elemento por carácter en su cadena porque es iterable.
hgolov
2
De hecho, es importante tener en cuenta que las cadenas, como objetos "completos", deben agregarse con .add, no .update, recientemente me enfrenté a un error bastante furtivo debido a este pequeño detalle.
lalilulelost
278

Definir conjunto

a = set()

Use agregar para agregar valores individuales

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

Use la actualización para agregar elementos de tuplas, conjuntos, listas o conjuntos congelados

a.update([3,4])

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

Si desea agregar una tupla o un conjunto congelado, use agregar

a.add((5, 6))

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

Nota: Dado que los elementos del conjunto deben ser hashable y las listas se consideran mutables, no puede agregar una lista a un conjunto. Tampoco puede agregar otros conjuntos a un conjunto. Sin embargo, puede agregar los elementos de listas y conjuntos como se demuestra con el método ".update".

RandallShanePhD
fuente
105

También puede usar el |operador para concatenar dos conjuntos ( unión en teoría de conjuntos):

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

O una forma más corta usando |=:

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

Nota: En versiones anteriores a Python 2.7, use en set([...])lugar de {...}.

nyuszika7h
fuente
1
Si tiene una lista de conjuntos my_sets, entonces puede hacer big_set = my_sets[0].union(*my_sets[1:])para combinarlos todos
zelusp
45

Usar updateasí:

keep.update(newvalues)
fresa
fuente
10

Esta pregunta es la primera que aparece en Google cuando se busca "Python cómo agregar elementos para establecer", por lo que vale la pena señalar explícitamente que, si desea agregar una cadena completa a un conjunto, debe agregarse con .add(), no .update().

Digamos que tiene una cadena foo_strcuyo contenido es 'this is a sentence', y tiene un conjunto bar_setigual a set().

Si lo hace bar_set.update(foo_str), el contenido de su conjunto será {'t', 'a', ' ', 'e', 's', 'n', 'h', 'c', 'i'}.

Si lo hace bar_set.add(foo_str), el contenido de su conjunto será {'this is a sentence'}.

lalilulelost
fuente
3

La forma en que me gusta hacer esto es convertir tanto el conjunto original como los valores que me gustaría agregar a las listas, agregarlos y luego volver a convertirlos en un conjunto, así:

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 esta manera, también puedo agregar fácilmente múltiples conjuntos usando la misma lógica, lo que me da un resultado TypeError: unhashable type: 'set'si trato de hacerlo con el .update()método.

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

O

keep.update(np.arange(11))
rishi jain
fuente
0

Para mí, en Python 3, funciona simplemente de esta manera:

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

No sé si puede ser correcto ...

decadencia
fuente