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, lista, dictar, establecer, tupla etc. Estas son colecciones integradas. Se han desarrollado varios m贸dulos que proporcionan estructuras de datos adicionales para almacenar colecciones de datos. Uno de esos m贸dulos es Python m贸dulo de colecciones.

    Python m贸dulo de colecciones se introdujo para mejorar las funcionalidades de los contenedores de recogida integrados. El m贸dulo de colecciones de Python se introdujo por primera vez en su versi贸n 2.4. Este tutorial se basa en su 煤ltima versi贸n 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:

    • Mostrador
    • defaultdict
    • OrderedDict
    • deque
    • ChainMap
    • namedtuple ()

    El contador

    Mostrador es una subclase del objeto diccionario. los Counter() La funci贸n en el m贸dulo de colecciones toma un iterable o un mapeo como argumento y devuelve un Diccionario. En este diccionario, una clave es un elemento en el iterable o el mapeo y el valor es el n煤mero de veces que ese elemento existe en el iterable o el mapeo.

    Tienes que importar el Counter clase antes de poder crear una counter ejemplo.

    from collections import Counter
    
    Crear objetos de contador

    Hay varias formas de crear counter objetos. La forma m谩s sencilla es utilizar Counter() funcionar sin argumentos.

    cnt = Counter()
    

    Puede pasar una (lista) iterable a Counter() funci贸n para crear un counter objeto.

    list = [1,2,3,4,1,2,6,7,3,8,1]
    Counter(list)
    

    Finalmente, el Counter() La 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 art铆culo del 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])
    

    cuando imprime cnt[1], obtendr谩 la cuenta de 1.

    Salida:

    3
    

    En los ejemplos anteriores, cnt es un objeto de Counter clase que es una subclase de dict. Entonces tiene todos los m茅todos de dict clase.

    Aparte de eso, Counter tiene tres funciones adicionales:

    • Elementos
    • M谩s com煤n([n])
    • Sustraer([interable-or-mapping])
    La funci贸n element ()

    Puede obtener los elementos de un Counter objeto con elements() funci贸n. Devuelve una lista que contiene todos los elementos del Counter objeto.

    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 Counter objeto con un diccionario como argumento. En este objeto Contador, la cuenta de 1 es 3 y la cuenta de 2 es 4. La elements() la funci贸n se llama usando cnt objeto que devuelve un iterador que se pasa como argumento a la lista.

    El iterador se repite 3 veces sobre 1 y devuelve tres ‘1’ y se repite cuatro veces sobre 2 devolviendo cuatro ‘2 a la lista. Finalmente, la lista se imprime utilizando el print funci贸n.

    La funci贸n most_common ()

    los Counter() La funci贸n devuelve un diccionario desordenado. Puede ordenarlo de acuerdo con el n煤mero de conteos en cada elemento usando most_common() funci贸n de la Counter objeto.

    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)]
    

    Puedes ver eso most_common La funci贸n devuelve una lista, que se ordena en funci贸n del recuento de elementos. 1 tiene una cuenta de tres, por lo tanto, es el primer elemento de la lista.

    La funci贸n restar ()

    los subtract() toma iterable (lista) o un mapeo (diccionario) como argumento y deduce el recuento de elementos usando ese argumento. Mira 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 cnt objeto que creamos primero, tiene una cuenta de 3 para ‘1’ y cuenta de 4 para ‘2’. los deduct El diccionario tiene el valor ‘1’ para la clave ‘1’ y el valor ‘2’ para la clave ‘2’. los subtract() la funci贸n dedujo 1 conteo de la tecla ‘1’ y 2 conteos de la tecla ‘2’.

    El defaultdict

    los defaultdict funciona exactamente como un diccionario de Python, excepto que no arroja KeyError cuando intentas acceder a una clave inexistente.

    En cambio, inicializa la clave con el elemento del tipo de datos que pasa como argumento en la creaci贸n de defaultdict. El tipo de datos se llama default_factory.

    Importar defaultdict

    Primero, tienes que importar defaultdict de collections m贸dulo antes de usarlo:

    from collections import defaultdict
    
    Crear un defaultdict

    Puedes crear un defaultdict con el defaultdict() constructor. Tienes que especificar un tipo de datos como argumento. Verifique el siguiente c贸digo:

    nums = defaultdict(int)
    nums['one'] = 1
    nums['two'] = 2
    print(nums['three'])
    

    Salida:

    0
    

    En este ejemplo, int se pasa como el default_factory. Observa que solo pasas intno int(). A continuaci贸n, se definen los valores para las dos claves, a saber, ‘uno’ 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谩 un KeyError. Pero defaultdict inicializar la nueva clave con default_factoryel valor predeterminado que es 0 para int. Por lo tanto, cuando se ejecute el programa, se imprimir谩 0. Esta caracter铆stica particular de inicializar claves inexistentes se puede aprovechar en varias situaciones.

    Por ejemplo, supongamos que desea el recuento de cada nombre en una lista de nombres indicados como “Mike, John, Mike, Anna, Mike, John, John, Mike, 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 defaultdict con int como default_factory. los names_list incluye un conjunto de nombres que se repiten varias veces. los split() La funci贸n devuelve una lista de la cadena dada. Rompe la cadena cada vez que 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 defaultdict nombrado como count e inicializado a 0 basado en default_factory. Si se vuelve a encontrar el mismo elemento, a medida que contin煤a el ciclo, se incrementar谩 el recuento de ese elemento.

    El OrderedDict

    OrderedDict es un diccionario donde las claves mantienen el orden en el que se insertan, lo que significa que si cambia el valor de una clave m谩s tarde, no cambiar谩 la posici贸n de la clave.

    Importar OrderedDict

    Usar OrderedDict tienes que importarlo desde el m贸dulo de colecciones.

    from collections import OrderedDict
    
    Crear un OrderedDict

    Puede crear un objeto OrderedDict con OrderedDict() constructor. En el siguiente c贸digo, crea un OrderedDict sin ning煤n argumento. Despu茅s de eso, 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)])
    

    Tambi茅n puede acceder a cada elemento mediante un bucle. Eche 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 OrderedDict con Counter. Aqu铆, creamos un Counter de una lista e inserte el elemento en un OrderedDict basado en su recuento.

    La letra que aparece con m谩s frecuencia se insertar谩 como la primera clave y la letra que aparece con menos 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

    los deque es una lista optimizada para insertar y eliminar elementos.

    Importar la deque

    Tienes que importar deque clase de collections m贸dulo antes de usarlo.

    from collections import deque
    
    Creando un deque

    Puedes crear una deque con 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 deq que creamos en cualquiera de los extremos. Para agregar un elemento a la derecha de la deque, debes usar append() m茅todo.

    Si desea agregar un elemento al inicio de la deque, debe usar appendleft() m茅todo.

    deq.append("d")
    deq.appendleft("e")
    print(deq)deque
    

    Salida:

    deque(['e', 'a', 'b', 'c', 'd'])
    

    Puedes notar que d se agrega al final de deq y e se agrega al inicio de la deq

    Eliminar elementos de la 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 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 del deq.

    Limpiar una deque

    Si desea eliminar todos los elementos de una deque, puede usar 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 clear() funci贸n, el deque se borra y ves none en la salida.

    Contando elementos en un deque

    Si desea encontrar el recuento de un elemento espec铆fico, use 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, la cuenta de “a” es 1. Por lo tanto, se imprime “1”.

    El ChainMap

    ChainMap se utiliza para combinar varios diccionarios o mapeos. Devuelve una lista de diccionarios.

    Importar mapa de cadena

    Tienes que importar ChainMap desde el collections m贸dulo antes de usarlo.

    from collections import ChainMap
    
    Crear un ChainMap

    Para crear un mapa de cadena podemos usar 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 diccionarios como resultado. Puede acceder a los valores del mapa de cadena por nombre de clave.

    print(chain_map['a'])
    

    Salida:

    1
    

    ‘1’ se imprime como el valor de la clave ‘a’ es 1. Otro punto importante es ChainMap actualiza sus valores cuando se actualizan sus diccionarios asociados. Por ejemplo, si cambia el valor de ‘c’ en dict2 a ‘5’, notar谩 el cambio en ChainMap tambi茅n.

    dict2['c'] = 5
    print(chain_map.maps)
    

    Salida:

    [{'a': 1, 'b': 2}, {'c': 5, 'b': 4}]
    
    Obtenci贸n de claves y valores de ChainMap

    Puede acceder a las claves de un ChainMap con keys() funci贸n. 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 dict1. Como regla general, cuando una clave aparece en m谩s de un diccionario asociado, ChainMap toma el valor de esa clave del primer diccionario.

    Agregar un nuevo diccionario a ChainMap

    Si desea agregar un nuevo diccionario a un existente ChainMap, utilizar new_child() funci贸n. Crea una nueva ChainMap con 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 se agrega un nuevo diccionario al comienzo de ChainMap lista.

    El namedtuple ()

    los namedtuple() devuelve una tupla con nombres para cada posici贸n en la tupla. Uno de los mayores problemas con las tuplas ordinarias es que debe recordar el 铆ndice de cada campo de un objeto de tupla. Evidentemente, esto es dif铆cil. los namedtuple se introdujo para resolver este problema.

    Importar namedtuple

    Antes de usar namedtuple, tienes que importarlo desde el collections m贸dulo.

    from collections import namedtuple
    
    Crear una tupla con nombre
    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 namedtuple objeto Student ha sido declarado. Puede acceder a los campos de cualquier instancia de un Student class por el nombre del campo definido.

    Crear una tupla con nombre usando la lista

    los namedtuple() La funci贸n requiere que se le pase cada valor por separado. En su lugar, puede utilizar _make() para crear un namedtuple instancia con una lista. Verifique el siguiente c贸digo:

    s2 = Student._make(['Adam','joe','18'])
    print(s2)
    

    Salida:

    Student(fname="Adam", lname="joe", age="18")
    
    Crear una nueva instancia con una instancia existente

    los _asdict() La funci贸n se puede utilizar para crear una OrderedDict instancia de una instancia existente.

    s2 = s1._asdict()
    print(s2)
    

    Salida:

    OrderedDict([('fname', 'John'), ('lname', 'Clarke'), ('age', '13')])
    
    Cambiar valores de campo con la funci贸n _replace ()

    Para cambiar el valor de un campo de una instancia, el _replace() se utiliza la funci贸n. Recu茅rdalo, _replace() La 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 todav铆a 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.

    Referencias

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *