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?
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?
Respuestas:
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 .update
llamada es más rápido y práctico, cuando es factible.
.add
espera un solo tipo hashable, mientras .update
espera un objeto iterable
.add
, no .update
, recientemente me enfrenté a un error bastante furtivo debido a este pequeño detalle.
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".
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 {...}
.
my_sets
, entonces puede hacer big_set = my_sets[0].union(*my_sets[1:])
para combinarlos todos
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_str
cuyo contenido es 'this is a sentence'
, y tiene un conjunto bar_set
igual 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'}
.
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.
keep.update((0,1,2,3,4,5,6,7,8,9,10))
O
keep.update(np.arange(11))
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 ...
.add
agrega un solo elemento,.update
agrega varios elementos. ¿Es eso correcto?