Agregar valores a un conjunto en Python


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.


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


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


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


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


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.


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

O

keep.update(np.arange(11))

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.