Ir al contenido principal

Python: Listas...

Continuamos recorriendo Python y hoy llega el turno de las listas. Que son colecciones ordenadas de datos y que equivalen a los arrays de otros lenguajes, pero que tienen varias particularidades y nos ofrecen muchas posibilidades adicionales respecto de los arrays de lenguajes como C.

Creando una lista:


Como dijimos, una lista es una colección ordenada de datos, en Python tienen la particularidad de poder almacenar cualquiera de los tipos de datos que ya conocemos e incluso pueden almacenar otras listas.


Para crear una, debemos declararla como lo haríamos con cualquier variable, y declaramos los elementos de la misma entre corchetes separados por comas.



Veamos un ejemplo de una lista desde el intérprete:




Como se ve en la imagen, creamos una lista con 5 elementos. Python nos permite hacer algo así y agregar en una misma lista elementos de 5 tipos diferentes, algo que otros lenguajes con arrays homogéneos no permiten.


También podemos agregar una lista como elemento de otra lista:




En este ejemplo, el tercero de los elementos de la lista2 es la lista que creamos anteriormente.


Accediendo a los elementos de una lista:


Para acceder a los elementos de una lista ya creada e inicializada, usaremos la siguiente sintaxis:



Donde el índice corresponde a la posición del elemento dentro de la lista, teniendo en cuenta que el primer elemento comienza con el índice 0.

Veamos un ejemplo mostrando un elemento de la primera lista con print:


Aquí mostramos el elemento de índice 3 de la primera lista, que sería el cuarto elemento: en este caso el número real 2.0.

Accediendo a los elementos de una lista dentro de otra lista:


En el caso que quisiéramos acceder a un elemento de una lista que está dentro de otra lista, debemos usar 2 índices:




Donde el nombre es el de la lista exterior (la que contiene a la otra), el índice1 es el correspondiente a la posición en donde se encuentra la segunda lista y el índice2 es el índice del elemento de la segunda lista al que queremos acceder.

Veamos el ejemplo para mostrar el elemento "Programación.NERD" de la primera lista accediendo desde la lista2 que la contiene:


Donde el primer índice nos marca el índice de la posición donde se encuentra lista dentro de lista2 y el segundo índice el del elemento que queríamos en lista.

En el caso que tuviéramos una cantidad mayor de listas anidadas, deberíamos usar tantos índices como sea necesario si deseamos acceder a un elemento de una sublista desde la lista exterior que contenga a las demás como vemos en el ejemplo:


Modificando un elemento concreto de la lista:


Podemos utilizar la misma forma que usábamos para acceder a un elemento para modificarlo si colocamos la lista con el índice del lado izquierdo de una operación de asignación:




Como vemos en el ejemplo:



Donde mostramos el complejo que está en el índice 4 de la lista y lo cambiamos por el entero 55.

Usando índices negativos:


La posibilidad de usar índices negativos es algo poco común que Python nos ofrece, de esta manera podemos acceder o modificar los elementos de una lista de atrás para adelante. De manera que el índice -1 corresponde al último elemento de la lista, el -2 al penúltimo y así sucesivamente.

Veamos el ejemplo:


Donde vemos que accedemos al elemento de índice 1 de la lista contando de atrás hacia adelante y usando el índice negativo -4.

Seleccionando porciones de la lista:


Python también nos permite la posibilidad de acceder y modificar porciones de una lista mediante lo que se conoce como particionado (o slicing). Esto podemos hacerlo mediante la sintaxis:


Donde inicio y fin son índices que Python interpretará como que queremos la porción de la lista que va desde inicio hasta fin sin tomar este último.

Veamos esto con un ejemplo donde guardamos una porción de la lista en otra lista:


También podemos agregar tres números en este particionado:


Donde el último indica cada cuántas posiciones agregar un elemento de la lista como se puede apreciar en el ejemplo:


Este particionado también puede usarse para modificar una lista e incluso su tamaño si en el lado derecho de la asignación colocamos más o menos elementos que los de la porción de la izquierda.


Agregando y borrando elementos de una lista:


Por último, para agregar o quitar elementos a una lista, haremos lo siguiente:


Por lo que si queremos agregar un elemento más a nuestra lista de ejemplo haríamos:




Y si quisiéramos borrar por ejemplo el 55 de la nueva lista que vemos en el ejemplo haríamos:







Comentarios

Entradas populares de este blog

C: Conversiones de tipo (casting) en C...

El casting o simplemente cast  nos permite hacer una conversión explícita de un tipo de dato a otro, a criterio del programador siempre y cuando estos tipos sean compatibles. Este cast se realiza a través de un operador de conversión de tipos (type casting operator) y es un recurso a tener en cuenta ya que hay situaciones en que nos puede resultar de gran utilidad. Hacer uso de un cast es tan sencillo como poner (tipo de dato)  delante de la expresión o variable a convertir. Veamos un ejemplo: Declaramos una variable de tipo int con un identificador tan creativo como "a" y le realizamos diferentes cast a a para mostrarlo como si fuera un float, un double y un char en un printf. Lo que obtendríamos en pantalla sería lo siguiente: Donde tenemos el valor de nuestro a, a convertido en float y double (mostrándolo con 3 cifras decimales) y a convertido en char. Si vemos este último caso, al hacer la conversión de "a" a char toma a como el código ascii de

C: Ejemplos: Congruencia de Zeller (nivel básico) ...

La Congruencia de Zeller es un algoritmo que se atribuye al matemático alemán Julius Christian Johannes Zeller que vivió en el siglo XIX. Este algoritmo nos permite determinar el día de la semana que le corresponde a una fecha determinada del calendario Gregoriano. La fórmula que nosotros usaremos (con algunas modificaciones respecto de la original para poder usarla en  informática) es la siguiente: Donde h es el día de la semana (entre 0 y 6), J es año/100 (la centuria) y K es año mod 100 (el año de la centuria). Y hay que tener en cuenta que los meses de enero y febrero cuentan como el mes 13 y 14 del año anterior. Ahora que tenemos la fórmula, programemos el algoritmo en C mediante el uso de una función: Analicemos el código paso a paso: Tenemos en cuenta el caso de enero y febrero: Dijimos que estos meses corresponden a los meses 13 y 14 del año anterior por lo que los asignamos como corresponde (mes + 12 , que dará 13 para enero y 14 para febrero) y le rest

Algoritmos: Resolución de problemas y refinamientos en pseudocódigo...

En otras entradas, vimos las partes que debe tener nuestro algoritmo en pseudocódigo y las estructuras que utilizaremos para resolverlo. Ahora llega el turno de implementar todo en conjunto para dar origen a nuestra creación. Pero ¿cómo resolvemos un problema así? Para hacerlo, utilizaremos lo que llamamos refinamientos sucesivos. Este concepto consiste en dividir el problema en subproblemas más pequeños y a estos, a su vez, en otros más pequeños; y así sucesivamente hasta que la solución de los últimos sea trivial, sencillo de resolver. Luego usaremos todas las soluciones obtenidas para armar la solución de nuestro problema mayor. Este principio, tiene base en parte de la técnica divide and conquer (dependiendo de la traducción: "divide y vencerás") que es una de las muchas técnicas de resolución de algoritmos existentes. Como vemos, al dividir el problema en otros más pequeños y más fáciles de resolver, podemos pasar de un problema complicado a uno cuya solución es much