Post Top Ad

Your Ad Spot

martes, 25 de junio de 2019

Introducción al módulo de colecciones de Python

Introducción

Las colecciones en Python son contenedores que se utilizan para almacenar colecciones de datos, por ejemplo, list, dict, set, tuple, etc. Estas son colecciones integradas. Se han desarrollado varios módulos que proporcionan estructuras de datos adicionales para almacenar colecciones de datos. Uno de estos módulos es el módulo de colecciones de Python .
Se introdujo el módulo de colecciones de Python para mejorar las funcionalidades de los contenedores de colección incorporados. El módulo de colecciones de Python se introdujo por primera vez en su versión 2.4. Este tutorial se basa en su último lanzamiento estable (versión 3.7).

Módulo de Colecciones

En este tutorial, analizaremos 6 de las estructuras de datos más utilizadas del módulo de colecciones de Python. Son los siguientes:

El contador

Contador es una subclase de objeto de diccionario. La Counter()función en el módulo de colecciones toma un iterable o una asignación como argumento y devuelve un Diccionario. En este diccionario, una clave es un elemento en el iterable o la asignación y el valor es el número de veces que ese elemento existe en el iterable o la asignación.
Debe importar la Counterclase antes de poder crear una counterinstancia.
from collections import Counter  
Crear objetos de contador
Hay múltiples formas de crear counterobjetos. La forma más sencilla es utilizar la Counter()función sin ningún argumento.
cnt = Counter()  
Puede pasar una función iterable (lista) Counter()para crear un counterobjeto.
list = [1,2,3,4,1,2,6,7,3,8,1]  
Counter(list)  
Finalmente, la Counter()función puede tomar un diccionario como argumento. En este diccionario, el valor de una clave debe ser el "recuento" de esa clave.
Counter({1:3,2:4})  
Puede acceder a cualquier elemento de contador con su clave como se muestra a continuación:
list = [1,2,3,4,1,2,6,7,3,8,1]  
cnt = Counter(list)  
print(cnt[1])  
Al imprimir cnt[1], obtendrás la cuenta de 1.
Salida:
3  
En los ejemplos anteriores, cntes un objeto de Counterclase que es una subclase de dictAsí que tiene todos los métodos de dictclase.
Aparte de eso, Countertiene tres funciones adicionales:
  1. Elementos
  2. Most_common ([n])
  3. Restar ([interable-o-mapeo])
La función element ()
Puede obtener los elementos de un Counterobjeto con elements()función. Devuelve una lista que contiene todos los elementos en el Counterobjeto.
Mira el siguiente ejemplo:
cnt = Counter({1:3,2:4})  
print(list(cnt.elements()))  
Salida:
[1, 1, 1, 2, 2, 2, 2]
Aquí, creamos un Counterobjeto con un diccionario como argumento. En este objeto Contador, el conteo de 1 es 3 y el conteo de 2 es 4. La elements()función se llama usando un cntobjeto que devuelve un iterador que se pasa como un argumento a la lista.
El iterador se repite 3 veces en 1, devolviendo tres '1', y repite cuatro veces en 2, regresando cuatro '2' a la lista. Finalmente, la lista se imprime utilizando la printfunción.
La función most_common ()
La Counter()función devuelve un diccionario que no está ordenado. Puede clasificarlo de acuerdo con el número de conteos en cada elemento usando la most_common()función del Counterobjeto.
list = [1,2,3,4,1,2,6,7,3,8,1]  
cnt = Counter(list)  
print(cnt.most_common())  
Salida:
[(1, 3), (2, 2), (3, 2), (4, 1), (6, 1), (7, 1), (8, 1)]
Puede ver que la most_commonfunción devuelve una lista, que se ordena según el recuento de los elementos. 1 tiene una cuenta de tres, por lo que es el primer elemento de la lista.
La función restar ()
El subtract()tomo iterable (lista) o un mapeo (diccionario) como argumento y deduce el recuento de elementos utilizando ese argumento. Compruebe el siguiente ejemplo:
cnt = Counter({1:3,2:4})  
deduct = {1:1, 2:2}  
cnt.subtract(deduct)  
print(cnt)  
Salida:
Counter({1: 2, 2: 2})  
Puedes notar que el cntobjeto que creamos primero, tiene un conteo de 3 para '1' y un conteo de 4 para '2'. El deductdiccionario tiene el valor '1' para la clave '1' y el valor '2' para la clave '2'. La subtract()función dedujo 1 conteo de la tecla '1' y 2 conteos de la tecla '2'.

El defaultdict

Las defaultdictobras exactamente un diccionario de Python, a excepción de que no tira KeyErroral intentar acceder a una clave inexistente.
En su lugar, inicializa la clave con el elemento del tipo de datos que pasa como argumento en la creación de defaultdictSe llama el tipo de datos default_factory.
Importar defaultdict
Primero, tienes que importar defaultdictdesde el collectionsmódulo antes de usarlo:
from collections import defaultdict  
Crear un defaultdict
Puedes crear un defaultdictcon el defaultdict()constructor. Tienes que especificar un tipo de datos como argumento. Compruebe el siguiente código:
nums = defaultdict(int)  
nums['one'] = 1  
nums['two'] = 2  
print(nums['three'])  
Salida:
0  
En este ejemplo, intse pasa como el default_factoryObserve que pasa únicamente int, no int()A continuación, los valores se definen para las dos claves, a saber, 'una' y 'dos', pero en la siguiente línea intentamos acceder a una clave que aún no se ha definido.
En un diccionario normal, esto forzará a KeyErrorPero defaultdictinicialice la nueva clave con default_factoryel valor predeterminado de 'que es 0 para intPor lo tanto, cuando se ejecute el programa, se imprimirá 0. Esta característica particular de la inicialización de claves no existentes puede ser explotada en varias situaciones.
Por ejemplo, supongamos que desea el recuento de cada nombre en una lista de nombres dados como "Mike, John, Mike, Anna, Mike, John, John, Mike, Britney, Smith, Anna, Smith".
from collections import defaultdict

count = defaultdict(int)  
names_list = "Mike John Mike Anna Mike John John Mike Mike Britney Smith Anna Smith".split()  
for names in names_list:  
    count[names] +=1
print(count)  
Salida:
defaultdict(<class 'int'>, {'Mike': 5, 'Britney': 1, 'John': 3, 'Smith': 2, 'Anna': 2})  
Primero, creamos un defaultdictwith int como default_factoryEl names_listincluye un conjunto de nombres que se repiten varias veces. La split()función devuelve una lista de la cadena dada. Rompe la cadena cuando se encuentra un espacio en blanco y devuelve palabras como elementos de la lista. En el bucle, cada elemento de la lista se agrega al defaultdictnombre como county se inicializa en 0 en función de default_factorySi se vuelve a encontrar el mismo elemento, a medida que el bucle continúa, se incrementará la cuenta de ese elemento.

El decreto ordenado

OrderedDict es un diccionario donde las claves mantienen el orden en que se insertan, lo que significa que si cambia el valor de una clave más adelante, no cambiará la posición de la clave.
Importar OrderedDict
Para usarlo OrderedDicthay que importarlo desde el módulo de colecciones.
from collections import OrderedDict  
Crear un OrderedDict
Puede crear un objeto OrderedDict con el OrderedDict()constructor. En el siguiente código, creas OrderedDictsin argumentos. Después de que algunos elementos se insertan en él.
od = OrderedDict()  
od['a'] = 1  
od['b'] = 2  
od['c'] = 3  
print(od)  
Salida:
OrderedDict([('a', 1), ('b', 2), ('c', 3)])  
Puedes acceder a cada elemento usando un bucle también. Echa un vistazo al siguiente código:
for key, value in od.items():  
    print(key, value)
Salida:
a 1  
b 2  
c 3  
El siguiente ejemplo es un caso de uso interesante de OrderedDictcon CounterAquí, creamos un elemento Counterde una lista e insertamos un elemento en OrderedDictfunción de su recuento.
La letra que aparezca con mayor frecuencia se insertará como la primera clave y la letra que aparezca con menor frecuencia se insertará como la última clave.
list = ["a","c","c","a","b","a","a","b","c"]  
cnt = Counter(list)  
od = OrderedDict(cnt.most_common())  
for key, value in od.items():  
    print(key, value)
Salida:
a 4  
c 3  
b 2  

El deque

El dequees una lista optimizada para insertar y eliminar elementos.
Importar el deque
Tienes que importar la dequeclase del collectionsmódulo antes de usarlo.
from collections import deque  
Creando un deque
Puedes crear un deque con el deque()constructor. Tienes que pasar una lista como argumento.
list = ["a","b","c"]  
deq = deque(list)  
print(deq)  
Salida:
deque(['a', 'b', 'c'])  
Insertar elementos para deque
Puede insertar fácilmente un elemento en el que deqhemos creado en cualquiera de los extremos. Para agregar un elemento a la derecha del deque, debe usar el append()método.
Si desea agregar un elemento al inicio del deque, debe usar el appendleft()método.
deq.append("d")  
deq.appendleft("e")  
print(deq)deque  
Salida:
deque(['e', 'a', 'b', 'c', 'd'])  
Puede observar que dse agrega al final de deq y ese agrega al inicio del deq
Eliminando elementos del deque
Eliminar elementos es similar a insertar elementos. Puede eliminar un elemento de la misma manera que inserta elementos. Para eliminar un elemento del extremo derecho, puede utilizar la pop()función y para eliminar un elemento de la izquierda, puede utilizar popleft().
deq.pop()  
deq.popleft()  
print(deq)  
Salida:
deque(['a', 'b', 'c'])  
Puede observar que tanto el primer como el último elemento se eliminan de deq.
Limpiando un deque
Si desea eliminar todos los elementos de un deque, puede utilizar la clear()función.
list = ["a","b","c"]  
deq = deque(list)  
print(deq)  
print(deq.clear())  
Salida:
deque(['a', 'b', 'c'])  
None  
Puedes ver en la salida, al principio hay una cola con tres elementos. Una vez que aplicamos la clear()función, el deque se borra y se ve noneen la salida.
Contando elementos en un deque
Si desea encontrar el recuento de un elemento específico, utilice la count(x)función. Debe especificar el elemento para el que necesita encontrar el recuento, como argumento.
list = ["a","b","c"]  
deq = deque(list)  
print(deq.count("a"))  
Salida:
1  
En el ejemplo anterior, el conteo de 'a' es 1. Por lo tanto, '1' se imprime.

El mapa de cadena

ChainMapSe utiliza para combinar varios diccionarios o mapeos. Devuelve una lista de diccionarios.
Importar mapa de cadena
Tienes que importar ChainMapdesde el collectionsmódulo antes de usarlo.
from collections import ChainMap  
Crear un mapa de cadena
Para crear un mapa de cadena podemos usar el ChainMap()constructor. Tenemos que pasar los diccionarios que vamos a combinar como un conjunto de argumentos.
dict1 = { 'a' : 1, 'b' : 2 }  
dict2 = { 'c' : 3, 'b' : 4 }  
chain_map = ChainMap(dict1, dict2)  
print(chain_map.maps)  
Salida:
[{'b': 2, 'a': 1}, {'c': 3, 'b': 4}]
Puede ver una lista de diccionario como la salida. Puede acceder a los valores de mapa de cadena por nombre de clave.
print(chain_map['a'])  
Salida:
1  
'1' se imprime ya que el valor de la clave 'a' es 1. Otro punto importante es que ChainMapactualiza sus valores cuando se actualizan sus diccionarios asociados. Por ejemplo, si cambia el valor de 'c' en dict2'5', también notará el cambio ChainMap.
dict2['c'] = 5  
print(chain_map.maps)  
Salida:
[{'a': 1, 'b': 2}, {'c': 5, 'b': 4}]
Obteniendo claves y valores de ChainMap
Puede acceder a las teclas de una función ChainMapcon keys()Del mismo modo, puede acceder a los valores de los elementos con values()función, como se muestra a continuación:
dict1 = { 'a' : 1, 'b' : 2 }  
dict2 = { 'c' : 3, 'b' : 4 }  
chain_map = ChainMap(dict1, dict2)  
print (list(chain_map.keys()))  
print (list(chain_map.values()))  
Salida:
['b', 'a', 'c']
[2, 1, 3]
Observe que el valor de la clave 'b' en la salida es el valor de la clave 'b' en dict1Como regla general, cuando una clave aparece en más de un diccionario asociado, ChainMaptoma el valor de esa clave del primer diccionario.
Añadiendo un nuevo diccionario a ChainMap
Si desea agregar un nuevo diccionario a una existente ChainMap, use la new_child()función. Crea un nuevo ChainMapcon el diccionario recién agregado.
dict3 = {'e' : 5, 'f' : 6}  
new_chain_map = chain_map.new_child(dict3)  
print(new_chain_map)  
Salida:
ChainMap({'f': 6, 'e': 5}, {'a': 1, 'b': 2}, {'b': 4, 'c': 3})  
Observe que el nuevo diccionario se agrega al principio de la ChainMaplista.

El timbre nombrado ()

Los namedtuple()devuelve una tupla con nombres para cada posición en la tupla. Uno de los mayores problemas con las tuplas comunes es que debe recordar el índice de cada campo de un objeto de tupla. Esto es obviamente difícil. El namedtuplefue introducido para resolver este problema.
Importar nombretuple
Antes de usar namedtuple, tienes que importarlo desde el collectionsmódulo.
from collections import namedtuple  
Crear una pareja nombrada
from collections import namedtuple

Student = namedtuple('Student', 'fname, lname, age')  
s1 = Student('John', 'Clarke', '13')  
print(s1.fname)  
Salida:
Student(fname='John', lname='Clarke', age='13')  
En este ejemplo, un namedtupleobjeto Studentha sido declarado. Puede acceder a los campos de cualquier instancia de una Studentclase por el nombre de campo definido.
Creando una lista de usuarios con nombre
La namedtuple()función requiere que cada valor se le pase por separado. En su lugar, puede utilizar _make()para crear una namedtupleinstancia con una lista. Compruebe el siguiente código:
s2 = Student._make(['Adam','joe','18'])  
print(s2)  
Salida:
Student(fname='Adam', lname='joe', age='18')  
Crear una nueva instancia usando una instancia existente
La _asdict()función se puede utilizar para crear una OrderedDictinstancia a partir de una instancia existente.
s2 = s1._asdict()  
print(s2)  
Salida:
OrderedDict([('fname', 'John'), ('lname', 'Clarke'), ('age', '13')])  
Cambio de valores de campo con la función _replace ()
Para cambiar el valor de un campo de una instancia, _replace()se utiliza la función. Recuerda que, la _replace()función crea una nueva instancia. No cambia el valor de la instancia existente.
s2 = s1._replace(age='14')  
print(s1)  
print(s2)  
Salida:
Student(fname='John', lname='Clarke', age='13')  
Student(fname='John', lname='Clarke', age='14')  

Conclusión

Con eso, concluimos nuestro tutorial sobre el módulo Colecciones. Hemos discutido todos los temas importantes en el módulo de colección. El módulo de colección de Python aún necesita mejoras si lo comparamos con la biblioteca de Colección de Java. Por lo tanto, podemos esperar muchos cambios en las próximas versiones.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

outbrain

Páginas