index define create python set difference

define - set string python



Python: ¿Cuál es la diferencia entre set.difference y set.difference_update? (2)

s.difference (t) devuelve un nuevo conjunto sin elementos en t .

s.difference_update (t) devuelve un conjunto actualizado sin elementos en t .

¿Cuál es la diferencia entre estos dos métodos establecidos? Debido a que las actualizaciones de difference_update establecen s, ¿qué precauciones deben tomarse para evitar recibir un resultado de None de este método?

En términos de velocidad, ¿no debería set.difference_update ser más rápido ya que solo está eliminando elementos del conjunto s en lugar de crear un nuevo conjunto como en set.difference ()?


difference_update actualiza un conjunto in situ en lugar de devolver uno nuevo.

>>> s={1,2,3,4,5} >>> t={3,5} >>> s.difference(t) {1, 2, 4} >>> s {1, 2, 3, 4, 5} >>> s.difference_update(t) >>> s {1, 2, 4}


Q. ¿Cuál es la diferencia entre estos dos métodos establecidos?

R. La versión de actualización resta de un conjunto existente, lo muta y potencialmente lo deja más pequeño de lo que originalmente era. La versión que no es de actualización produce un nuevo conjunto, dejando los originales sin cambios.

P. Debido a que las actualizaciones de difference_update establecen s, ¿qué precauciones deben tomarse para evitar recibir un resultado de None de este método?

R. Los métodos de mutación en Python generalmente devuelven None como una forma de indicar que han mutado un objeto. La única "precaución" es no asignar el resultado Ninguno a una variable.

P. En términos de velocidad, ¿no debería set.difference_update ser más rápido ya que solo está eliminando elementos del conjunto s en lugar de crear un nuevo conjunto como en set.difference ()?

A. Sí, el algoritmo de la versión de actualización simplemente descarta valores.

Por el contrario, el algoritmo para la versión que no se actualiza depende del tamaño de los conjuntos.

Si el tamaño de s es cuatro o más veces mayor que t , la nueva versión del set copia primero el conjunto principal y luego descarta los valores del mismo. Entonces "s - t se implementa como n = s.copy(); n.difference_update(t) ). Ese algoritmo se usa cuando s es mucho más grande que t

De lo contrario, el algoritmo para la versión que no se actualiza es crear un nuevo conjunto vacío n , recorrer los elementos de s y agregarlos a n si no están presentes en t .