Si todavía no las leyeron, deberían leer las páginas Gestión de Memoria Automática, Introducción a Python (y manejo de memoria), y por otro lado, El lenguaje Python.
En esta sección vamos a focalizarnos en el manejo de listas utilizando python.
La lista en python a diferencia de C, es un tipo de dato ya existente con todo el poder de abstracción que ya vimos, prové el uso de un TDA lista. Además, como es un lenguajes con gestión automática de memoria, la vida nos va a sonreir :) y utilizar listas va a ser mucho más simple y poderoso que en C.
Podemos crear una nueva lista de (al menos) dos formas:
La función list() es el análogo a las funciones crearLista() que definíamos en nuestros TDA's en C. Es decir una función que me devuelve una lista vacía.
miLista = list()
print miLista
>>> []
Acá la asignamos a una variable y la imprimimos (vacía).
La otra forma es usar literales. Un literal en un lenguaje de programación se refiere a que dicho lenguaje tiene una forma de escribir a dicho objeto/estructura (la lista) con cierta sintaxis especial.
Por ejemplo, los números, los Strings (en C por ejemplo nosotros escribimos "Hola" y eso en realidad construye detrás el string como un vector de chars, pero no hace falta que hagamos [ 'H', 'o', 'l', 'a' ]. Eso es un ejemplo de literal.
Entonces la forma de definir una lista con literales es enumerando los elementos, separados por comas y rodeados de corchetes.
miLista = [ "Hola", "Mundo", "Feliz" ]
print miLista
>>> ['Hola', 'Mundo', 'Feliz']
Así como definimos las operaciones en nuesto TDA lista, la lista de python también ya trae funciones para las operaciones más comunes.
Pero antes...
Funciones / Métodos y sintaxis en Lenguajes Orientados a Objetos
Un detalle a tener en cuenta para no asustarse, es que Python es un lenguaje orientado a objetos, que entre otras cosas, permite definir las funciones que, por ejemplo manipulan una lista, todas juntas en el mismo objeto Lista. Y cambia un poco la forma de invocarlas.
Tradicionalmente nosotros teníamos funciones como:
void agregar(lista, elemento)
elemento primero(lista)
boolean vacia (lista)
void remover(lista, indice)
.... // etc
Como habrán notado, todas estas funciones operan sobre una lista, por lo que reciben como primer parámetro a la lista.
Ahora, los lenguajes de objetos permiten definir este tipo de funciones como parte del objeto mismo, de la lista.
Entonces luego se utilizan así
unalista.agregar(element)
unalista.primero()
unalista.remover(3)
Es decir que la sintaxis es:
variable.nombreFuncion( parametros... )
Y si comparamos con las funciones que escribimos antes, podemos pensar que el primer parámetro "lista", en esta nueva forma, cambiar de lugar. Y en lugar de ser el primer parámetro, es lo que va antes del nombre de la función (y del punto)
Append, Remove, Extend
Ahora sí, veamos unas funciones útiles.
Las listas en Python son mutables, es decir que se pueden modificar (a diferencia de las tuplas, que son inmutables -ya las veremos más adelante-). La función append se utilizar para agregar un nuevo elemento al final de la lista.
lista = [10, 34, 23, 10, 5, 99, 17]
print lista
>> [10, 34, 23, 10, 5, 99, 17]
lista.append(12)
print lista
>> [10, 34, 23, 10, 5, 99, 17, 12]
remove se utiliza para remover la primer ocurrencia del elemento que pasamos por parámetro.
Ej:
lista = [10, 34, 23, 10, 5, 99, 17]
lista.remove(10)
print lista
>> [34, 23, 10, 5, 99, 17]
Como vemos solo se removió el primer elemento "10".
Si necesitamos borrar todas las ocurrencias debemos hacerlo nosotros invocando todas las veces que sea necesario el remove. Por ejemplo:
while 10 in lista: lista.remove(10)
print lista
>> [34, 23, 5, 99, 17]
De paso vemos la sentencia while, y el operador in que se utiliza para checkear si un elemento está contenido en una lista (retorna un booleano).
Si queremos agregar no un elemento, sino muchos, necesitamos utilizar otra función, llamada extend que recibe otra lista como parámetro, y agregar todos sus elementos a nuestra lista. Por ejemplo, dada la lista [34, 23, 5, 99, 17]
lista.extend([2, 4])
print lista
>> [34, 23, 5, 99, 17, 2, 4]
Por el contrario si hubieramos utilizado append hubiera quedado así:
>> [34, 23, 5, 99, 17, [2, 4]]
Es decir que hubiera agregado la lista [2,4] como un elemento. Quedando como una lista, dentro de otra lista.
Indexado y slicing
Las listas, al igual que los strings pueden indexarse a través del operador "[ i ]", al igual que accedíamos a un elemento en un array en C.
Aunque acá tenemos muchas más utilidades para hacer más simple el procesamiento (evitando recorrer y cosas así). Veamos unos ejemplos de indexado simple
lista = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
print lista[0]
# 'a'
print lista[1]
# 'b'
print lista[-1]
# Ultimo Elemento: 'h'
print lista[-2]
# Ante ultimo: 'g'
Ademas, podemos obtener sublistas, utilizando [ i : j ] con "i" como el indice de inicio (inclusive) y "j" como el final (no inclusive). De hecho se puede especificar solo uno de los dos:
print lista[2:5]
# sublista, desde indice 2 (inclusive), hasta el 5 (no inclusive) -> ['c', 'd', 'e']
print lista[4:]
# sublista desde el indice 4, hasta el final -> ['e', 'f', 'g', 'h']
print lista[:3]
# sublista desde el inicio hasat el indice 3 (no inclusive) -> ['a', 'b', 'c']
Con slicings también podemos "asignar", modificando así la lista.
lista[3:6] = ['a', 'b', 'c']
print lista
# imprime ['a', 'b', 'c', 'a', 'b', 'c', 'g', 'h']
Otras operaciones para derivar listas (+, *)
El operador suma se puede utilizar para concatenar dos listas. Aunque no alteran la lista original, sino que devuelven una nueva.
lista = [1, 2, 3]
concatenacion = lista + [4, 5]
print lista
# > [1,2,3]
print concatenacion
# > [1,2,3,4,5]
También se puede derivar otra lista utilizando el operador multiplicación:
multiplicada = ['a','b', 'c'] * 3
print 'multiplicada', multiplicada
# > multiplicada ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']
Para más ejemplos y operaciones sobre listas, ver la documentación de Python
Podés seguir por las siguientes páginas: