Anuncios

Bienvenidos sean a este post, hoy veremos a la contraparte del post anterior.

Anuncios

Las secuencias mutables a diferencia de sus hermanas vistas en el post anterior si podemos cambiar el valor de estas una vez creadas, estas estan compuestas principalmente por dos tipos: listas y arrays de bytes, si bien estos son dos tipos de colecciones o estructura de datos, el verdadero rey de todos ellos es dictionary (diccionario) el cual mencionamos en este post pero si este es el rey su reina sera lista.

Anuncios

Listas

Estas son muy similares a los tuples vistos en el post anterior pero en este caso no tendremos las restricciones de la inmutabilidad, usualmente se lo usa para almacenar colecciones de objetos homogeneos pero en realidad nada te impide tener objetos heterogeneos pero este es un tema que veremos en un momento, pasemos a ver las distintas formas de crear una lista vacia:

>>> []
[]
>>> list()
[]
>>>
Anuncios

En este caso vemos dos formas de crear una lista vacia, ya sea con corchetes o con la funcion list, veamos como crear una lista con valores:

>>> [1, 2, 3]
Anuncios

Es tan simple como crear tuples pero en lugar de usar parentesis utiliza los corchetes y los valores tambien estan separados por comas, ahora vamos a hacer algo asombroso:

>>> [x + 5 for x in [2,3,4]]
[7, 8, 9]
>>>
Anuncios

Primero especificamos que al valor almacenado en x le sumamos 5, despues tenemos un bucle for donde x tendra los valores de 2, 3 y 4, si observan el resultado es la operacion que introdujimos antes del bucle, es realmente magico, vamos a ver una lista de un tuple:

>>> list((1,3,5,7,9))
[1, 3, 5, 7, 9]
>>>
Anuncios

Esta es una forma simple de convertir un tuple en una lista, por ultimo vamos a transformar una cadena en una lista:

>>> list('tinchicus')
['t', 'i', 'n', 'c', 'h', 'i', 'c', 'u', 's']
>>>
Anuncios

Esto es como trabajar con array de chars de otros lenguajes mas primitivos, hasta aqui vimos como crear nuestras listas, asi como convertir otros tipos de datos en listas, pasemos a ver algunas herramientas de este tipo de secuencias, primero vamos a crear una nueva lista:

>>> a = [1, 2, 1, 3]
Anuncios

Nuestro siguiente paso sera agregar un nuevo valor por medio de la funcion append:

>>> a.append(13)
>>> a
[1, 2, 1, 3, 13]
>>>
Anuncios

Una vez hecho si lo mostramos en pantalla veremos que al final tenemos el nuevo valor porque tal como su nombre lo indica agrega (append) nuevos elementos a la lista, otra forma de agregar es por medio de extend:

>>> a.extend([5, 7])
>>> a
[1, 2, 1, 3, 13, 5, 7]
>>>
Anuncios

Como pueden ver la ventaja de trabajar con extend es la posibilidad de agregar mas de un valor a nuestra lista, por ultimo vamos a utilizar insert:

>>> a.insert(0, 17)
>>> a
[17, 1, 2, 1, 3, 13, 5, 7]
>>>
Anuncios

Con la funcion insert tenemos la posibilidad de insertar o ingresar un valor en la posicion que queramos, en este caso lo hacemos en la primera posicion, la cero, cuando lo mostramos en pantalla vemos como ahora nos quedo al comienzo de la misma, a esto nos referimos con secuencias mutables, pasemos a ver algunas funciones para obtener ciertos datos de nuestra lista:

>>> a.count(1)
2
>>> a.index(13)
5
>>>
Anuncios

La primera funcion nos sirve para contar cuantas veces se repite el valor que informamos en los parentesis y la segunda nos dice en que posicion de la lista o indice de la lista se encuentra el valor que le pasamos, comparen con el valor mostrado del ejemplo anterior y veran que ambos datos que devuelven son correctos, vamos a ver un par de funciones que nos permiten mas operaciones:

>>> min(a)
1
>>> max(a)
17
>>> sum(a)
49
>>> len(a)
8
>>>
Anuncios

En este caso tenemos una serie de funciones para obtener algunas datos extras, la primera funcion nos devuelve el valor minimo de la lista, la segunda nos devuelve el valor maximo de la lista, la tercera nos devuelve la suma total de los valores y la ultima nos devuelve la cantidad de elementos en dicha lista, con todo esto podemos pasar a ver como remover datos de la lista:

>>> a.pop()
7
>>> a.pop(3)
1
>>> a
[17, 1, 2, 3, 13, 5]
>>>
Anuncios

En este caso primero vemos a la funcion pop, si no informamos ninguna posicion este ira a la ultima posicion, lo removera pero antes nos mostrara en pantalla cual valor fue removido, despues hacemos lo mismo pero le pedimos que remueva la posicion 3 o lo mismo que decir la cuarta posicion, hace lo mismo primero removiendo el valor pero mostrandolo en pantalla, por ultimo les muestro como quedo hasta ahora nuestra lista, veamos la ultima funcion para remover un elemento:

>>> a.remove(17)
>>> a
[1, 2, 3, 13, 5]
>>>
Anuncios

Por medio de remove le decimos que quite el valor 17 de la lista, luego la mostramos y vemos que efectivamente se removio de la lista, veamos dos funciones para modificar el orden de nuestras listas:

>>> a.reverse()
>>> a
[5, 13, 3, 2, 1]
>>> a.sort()
>>> a
[1, 2, 3, 5, 13]
>>>
Anuncios

El primer metodo invierte el orden de los valores almacenados en la lista, comparen con el ejemplo anterior, y el segundo se encarga de ordenar los valores de menor a mayor, por ultimo vamos a ver una funcion para limpiar a nuestra lista:

>>> a.clear()
>>> a
[]
>>>
Anuncios

Como pueden ver esta es la forma mas simple de poder eliminar todos los elementos de una lista, con esto tenemos lo basico para manejar nuestras listas, a continuacion veremos un par de particularidades mas, la primera va a ser un par de operaciones arimeticas en listas:

>>> a = [1, 3, 5, 7]
>>> b = [6, 7, 8]
>>> a + b
[1, 3, 5, 7, 6, 7, 8]
>>> a * 2
[1, 3, 5, 7, 1, 3, 5, 7]
>>>
Anuncios

En este caso crearemos dos listas, a y b, lo primero que haremos es usar la suma de las dos listas pero a diferencia de lo que uno puede creer en lugar de sumar los valores hara una concatenacion de las dos listas quedando una superlista con todos los valores, en el segundo caso tomamos la lista a y la multiplicamos por 2, observando que ahora tenemos los valores de la lista a duplicados, recuerdan cuando al principio dijimos que la coleccion de objetos de una lista podia ser heterogenea, veamos un ejemplo practico:

>>> s = list('tinchicus')
>>> s
['t', 'i', 'n', 'c', 'h', 'i', 'c', 'u', 's']
>>> s.append(100)
>>> s
['t', 'i', 'n', 'c', 'h', 'i', 'c', 'u', 's', 100]
>>> s.extend('...')
>>> s
['t', 'i', 'n', 'c', 'h', 'i', 'c', 'u', 's', 100, '.', '.', '.']
>>> s.insert(4,100)
>>> s
['t', 'i', 'n', 'c', 100, 'h', 'i', 'c', 'u', 's', 100, '.', '.', '.']
>>>
Anuncios

En este ejemplo podemos ver como utilizamos todas las funciones para agregar nuevos valores, ya sean al final de nuestra lista o entre medio pero en todos los casos nunca afecto el acceso a la misma a pesar de ser distintos tipos, esta es una gran caracteristica del lenguaje, por ultimo vamos a hablar sobre la funcion sorted la cual sera una de las utiles para trabajar con listas, veamos el siguiente ejemplo:

>>> from operator import itemgetter
>>> a = [(5,3), (1,3), (1,2), (2, -1), (4,9)]
>>> sorted(a)
[(1, 2), (1, 3), (2, -1), (4, 9), (5, 3)]
>>>
Anuncios

Primero importaremos una funcion del paquete operator pero usaremos en el proximo ejemplo, luego creamos una lista con varios valores que poseen dos valores distintos, por ultimo usamos a sorted para ordenar los valores internos, ahora veremos como manejarlo con la funcion que importamos anteriormente:

>>> sorted(a, key=itemgetter(0))
[(1, 3), (1, 2), (2, -1), (4, 9), (5, 3)]
>>> sorted(a, key=itemgetter(1))
[(2, -1), (1, 2), (5, 3), (1, 3), (4, 9)]
>>> sorted(a, key=itemgetter(1), reverse=True)
[(4, 9), (5, 3), (1, 3), (1, 2), (2, -1)]
>>>
Anuncios

El primer caso solo los ordenara por el primer valor de los informados, por esta razon puede variar con respecto al ejemplo anterior, el siguiente caso lo ordena unicamente por el segundo valor y el ultimo caso lo vuelve a ordenar por el segundo valor pero esta vez en sentido inverso gracias al switch reverse, con esto hemos visto todas las opciones para manejar nuestras listas pasemos al siguiente tema.

Anuncios

Arrays de Bytes

Los arrays de bytes o mejor conocidos como bytearray son la version mutable de los objetos de tipo bytes, poseen los metodos mas usuales para manejar tanto a estos objetos como los objetos de tipo bytes, para entender mejor el tema veamos un ejemplo:

>>> bytearray()
bytearray(b'')
>>>
Anuncios

Esta funcion solamente crear un bytearray vacia, para crear un array con algunos datos usaremos la siguiente funcion:

>>> bytearray(10)
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
>>>
Anuncios

En este caso como solo informamos un numero el array creo 10 posiciones con valor de cero dentro del mismo, veamos el siguiente ejemplo:

>>> bytearray(range(5))
bytearray(b'\x00\x01\x02\x03\x04')
>>>
Anuncios

En este caso creamos un array de una iteracion de enteros por medio de range, si observan ahora tenemos valores dentro del mismo en 5 distintas posiciones, veamos otro ejemplo:

>>> nombre = bytearray(b'tinchicus')
>>> nombre.replace(b't', b'T')
bytearray(b'Tinchicus')
>>>
Anuncios

Primero creamos un nuevo array llamado nombre (observen como le pasamos la letra b para indicar que es de bytes y no un string), una vez creado usamos a replace para modificar la t minuscula por mayuscula, luego nos devuelve el cambio realizado, ahora probemos el siguiente ejemplo:

>>> nombre.endswith(b'us')
True
>>>
Anuncios

En este caso usamos endswith para verificar si el array termina con el valor que le pasamos, en este ‘us’, como es verdad nos devuelve un True, pasemos al siguiente ejemplo:

>>> nombre.count(b'i')
2
>>>
Anuncios

En esta ocasion vemos la funcion count que usaremos para contar en que posicion esta la informacion que le pasemos, para el caso es correcto que nos devuelva 2, por ultimo veamos el siguiente ejemplo:

>>> nombre.upper()
bytearray(b'TINCHICUS')
>>>
Anuncios

Por ultimo usamos una funcion llamada upper para convertir todos los caracteres en mayusculas, tan simple como eso, y podemos ver el resultado en pantalla, con todo esto cubrimos algunas de las funciones mas utilizadas para los arrays de bytes y con esto completamos las secuencias mutables.

Anuncios

En resumen, hemos visto dos de los tipos de secuencias mutables que difieren de lo visto en el post anterior, hemos visto que son las listas, las distintas funciones que nos proveen, las propiedades interesantes que nos dan mayor practicidad para trabajar, hemos visto como podemos transformar algunos tipos en otros y permitiendo la mutabilidad, tambien hemos visto a los arrays de bytes, como es, algunas funciones y cuales son las posibilidades que nos brindan, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.