Secuencias en Python Introducción a la Computación Clase 11 Patricia Borensztejn Una cadena es una secuencia • En Python tenemos los tipos de datos – Escalares: enteros, flotantes – Secuencias: • sucesión de elementos que pueden ser accedidos mediante un índice. • Hay: strings, Unicode strings, lists, tuples, bytearrays, buffers, and xrange objects… and more… and more porque Python es un lenguaje en evolución. • Las cadenas (strings) pertenecen al tipo secuencia. Secuencias: Listas • El concepto de secuencia es muy potente: podemos definir secuencias de valores de cualquier tipo: enteros, flotantes, cadenas… • Estas secuencias se llaman listas. • Las listas pueden contener elementos de distintos tipos… incluso pueden contener listas. Definiendo una lista • Se definen utilizando el corchete y los elementos se separan con comas • Ejemplos: l = *22, True, “una lista”, *1, 2]] Donde l es una variable de tipo lista que contiene cuatro elementos: l[0] es el entero 22 l[1] es el booleano True l[2] es la cadena “una lista” l[3] es otra lista formada por los enteros 1 y 2 Definiendo listas • También podemos definir los elementos de la lista como expresiones: >>> a = [1, 1+1, 6/2] >>> a [1, 2, 3] • Python almacena las listas como las cadenas: mediante referencias (punteros). • La variable a es un puntero a la lista Operadores para Listas • Como las listas y las cadenas son ambas del tipo secuencia, los mismos operadores y funciones que trabajan sobre cadenas, también trabajan sobre listas. • Ejemplo: operador len,+,* Concatenación y Asignación en Listas • La concatenación no modifica la lista original, crea una nueva zona de memoria. • La asignación copia el puntero Indexación • Podemos utilizar indexación con números negativos. • Operador de corte Operador de Corte: hace una copia Iteradores : for in Comparaciones • Si las listas tienen distinta longitud, son diferentes. • Si las listas tienen la misma longitud, se compara elemento a elemento de izquierda a derecha. • También funcionan los operadores: <,<=,>,>=. Probarlos para ver como funcionan…. Operador is • Ya hemos visto que a veces dos listas son la misma lista (si usamos la asignación) y a veces son distintas. (si usamos expresiones) • Por ejemplo: • El operador is permite averiguar si dos referencias apuntan al mismo objeto. Cuando tengamos dudas… • Podemos preguntar… • Aunque la respuesta nos parta la cabeza…. (lo que ocurre es que cuando Python evalúa expresiones asigna memoria.) Inmutabilidad de los escalares y de las cadenas • Para ahorrar memoria, Python considera que tanto los valores escalares (2, 3, 4.567, etc) como las cadenas («hola hola») son objetos inmutables. Inmutabilidad de los escalares y de las cadenas • Si modificamos el valor de un objeto inmutable, se crea una nueva zona de memoria Algo que no dijimos de las cadenas… • Esto no lo podemos hacer: debido a que las cadenas son INMUTABLES. • Las listas, a diferencia de las cadenas, son >>> a=["H","o","l","a"] MUTABLES. >>> a ['H', 'o', 'l', 'a'] >>> a[0]="h" >>> a ['h', 'o', 'l', 'a'] >>> La verdad sobre las listas (aunque no la querramos saber) • La lista a se almacena asi: >>> a=[1,2,1] • Entonces: La verdad sobre las listas (aunque no la querramos saber) • Al modificar un valor de la lista, lo que sucede es que se crea una nueva zona de memoria con el nuevo valor. Lo que se escribe dentro de la lista es la referencia al nuevo valor. • A la derecha mostramos la versión simplificada Agregar elementos a la lista • Usando el operador + (concatena dos listas) • Usando el método append • La diferencia entre ambas es que append añade los nuevos elementos a la lista, en cambio la concatenación copia primero la lista original sobre una nueva zona de memoria. Es decir, append es mas eficiente Ejemplo con listas: Lista de primos • Lo interesante es que comenzamos con una lista cuya longitud desconocemos, por lo tanto comienza sin elementos (lista vacía) , y crece en tiempo de ejecución… conclusión: la lista es una estructura dinámica!!!!!! Lectura de listas por teclado • Usando el operador de concatenación, o bien el método append o bien, creando una lista inicializada a cero con todos los elementos. • El operador * (recordemos) es de repetición. Borrado de elementos de una lista • Se pueden borrar elementos con la sentencia del. Esta sentencia no crea una nueva lista, sino que modifica la anterior. • Debemos ser muy cuidadosos cuando usamos el borrado mientras recorremos la lista… Operador in • Es el operador de pertenencia a una lista o a una cadena. Operadores de Listas secuencia[index] elemento situado en el índice index de la secuencia secuencia[ind1:ind2] elementos desde el índice ind1 hasta el índice ind2 secuencia * n la secuencia se repite n veces secuencia1 + secuencia2 concatena las secuencias secuencia1 y secuencia2 objeto in secuencia comprueba si objeto es un miembro de secuencia objeto not in secuencia comprueba si objeto no es un miembro de secuencia Funciones Pre-Definidas list (secuencia) convierte la secuencia a un tipo lista str (objeto) convierte el objeto a un tipo string tuple (secuencia) convierte la secuencia a un tipo tupla len (secuencia) devuelve la longitud (numero de elementos) de la secuencia max (secuencia) devuelve el elemento mas grande de la secuencia min (secuencia) devuelve el elemento menor de la secuencia De cadenas a listas y viceversa Continuará…. Próximamente en esta misma sala….