Agregar lista para configurar
¿Cómo agrego una lista de valores a un conjunto existente?
Agregar el contenido de una lista
Uso set.update()
o el |=
operador:
>>> a = set('abc')
>>> a
{'a', 'b', 'c'}
>>> xs = ['d', 'e']
>>> a.update(xs)
>>> a
{'e', 'b', 'c', 'd', 'a'}
>>> xs = ['f', 'g']
>>> a |= set(xs)
>>> a
{'e', 'b', 'f', 'c', 'd', 'g', 'a'}
Agregar la lista en sí
No es posible agregar directamente la lista al conjunto, ya que los elementos del conjunto deben ser hash .
En cambio, primero se puede convertir la lista en una tupla:
>>> a = {('a', 'b', 'c')}
>>> xs = ['d', 'e']
>>> a.add(tuple(xs))
>>> a
{('a', 'b', 'c'), ('d', 'e')}
No puede agregar una lista a un conjunto porque las listas son mutables, lo que significa que puede cambiar el contenido de la lista después de agregarla al conjunto.
Sin embargo, puedes agregar tuplas al conjunto, porque no puedes cambiar el contenido de una tupla:
>>> a.add(('f', 'g'))
>>> print a
set(['a', 'c', 'b', 'e', 'd', ('f', 'g')])
Editar : alguna explicación: la documentación define a set
como una colección desordenada de objetos hash distintos. Los objetos deben poder ser hash para que buscar, agregar y eliminar elementos se pueda hacer más rápido que mirar cada elemento individual cada vez que realiza estas operaciones. Los algoritmos específicos utilizados se explican en el artículo de Wikipedia . Los algoritmos de hash de Python se explican en effbot.org y __hash__
la función de Python en la referencia de Python .
Algunos hechos:
- Los elementos del conjunto , así como las claves del diccionario , deben ser hash
- Algunos tipos de datos que no se pueden dividir en hash:
list
: utilizartuple
en su lugarset
: utilizarfrozenset
en su lugardict
: no tiene contraparte oficial, pero hay algunas recetas
- Las instancias de objetos se pueden usar mediante hash de forma predeterminada y cada instancia tiene un hash único. Puede anular este comportamiento como se explica en la referencia de Python.
Para agregar los elementos de una lista a un conjunto , useupdate
De https://docs.python.org/2/library/sets.html
s.update(t): devuelve el conjunto s con elementos agregados desde t
P.ej
>>> s = set([1, 2])
>>> l = [3, 4]
>>> s.update(l)
>>> s
{1, 2, 3, 4}
Si, en cambio, desea agregar la lista completa como un solo elemento al conjunto, no puede hacerlo porque las listas no son hash. En su lugar, podrías agregar una tupla, por ejemplo s.add(tuple(l))
. Consulte también TypeError: tipo unhashable: 'lista' cuando se usa la función de conjunto incorporada para obtener más información al respecto.