Agregar lista para configurar

Resuelto Adam Matan asked hace 15 años • 13 respuestas

¿Cómo agrego una lista de valores a un conjunto existente?

Adam Matan avatar Aug 20 '09 21:08 Adam Matan
Aceptado

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')}
aehlke avatar Aug 20 '2009 14:08 aehlke

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 setcomo 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: utilizar tupleen su lugar
    • set: utilizar frozenseten su lugar
    • dict: 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.
Otto Allmendinger avatar Aug 20 '2009 14:08 Otto Allmendinger

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.

JDiMatteo avatar May 02 '2017 20:05 JDiMatteo