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 .updatellamada es más rápido y práctico, cuando es factible.
.addespera un solo tipo hashable, mientras .updateespera 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_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'}.
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 ...
.addagrega un solo elemento,.updateagrega varios elementos. ¿Es eso correcto?