Ir al contenido principal

Entradas

Mostrando las entradas etiquetadas como Lista

Cadenas

7.1. Un tipo de datos compuesto Hasta el momento hemos visto tres tipos: int , float , y string . Las cadenas son cuantitativamente diferentes de los otros dos porque están hechas de piezas menores: caracteres. Los tipos que comprenden piezas menores se llaman tipos de datos compuestos. Dependiendo de que estemos haciendo, podemos querer tratar un tipo compuesto como una única cosa o acceder a sus partes. Esta ambigüedad es útil. El operador corchete selecciona un carácter suelto de una cadena. 1: >>> fruta = "banana" 2: >>> letra = fruta[1] 3: >>> 4: print letra La expresion fruta[1] selecciona el caracter numero 1 de fruta . La variable letra apunta al resultado. Cuando mostramos letra, nos encontramos con una sorpresa: a La primera letra de " banana " no es a . A no ser que usted sea un programador. Por perversas razones, los científicos de la computacion siempre empiezan a contar desde cero. La 0-sima letra (“cero...

7.10. Clasificación de caracteres

A menudo viene bien examinar un carácter y comprobar si es una letra mayúscula o minúscula, o si es un carácter o un dígito. El modulo string proporciona varias constantes que son útiles para estos menesteres. La cadena string.lowercase contiene todas las letras que el sistema considera como minúsculas. De forma similar, string.uppercase contiene todas las mayúsculas. Pruebe lo que sigue y vea que obtiene: 1: >>> print string.lowercase 2: >>> print 3: string.uppercase 4: >>> print string.digits Podemos usar estas constantes y find para clasificar caracteres. Por ejemplo, si find(lowercase, c) devuelve un valor que no sea -1 , entonces c es una minúscula: 1: def esMinuscula(c): 2: return find(string.lowercase, c) != -1 Alternativamente, podemos aprovecharnos del operador in , que determina si un carácter aparece en una cadena: 1: def esMinuscula(c): 2: return c in string.lowercase Como una alternativa mas, podemo...

Capítulo 8

Listas Una lista es un conjunto ordenado de valores, en el cual cada valor va identificado por un índice. Los valores que constituyen una lista son sus elementos. Las listas son similares a las cadenas de texto ( strings ), que son conjuntos ordenados de caracteres, excepto en que los elementos de una lista pueden ser de cualquier tipo. Las listas y las cadenas , y otras cosas que se comportan como conjuntos ordenados, se llaman secuencias .

8.1. Valores de una lista

Hay varias maneras de crear una nueva lista; la mas sencilla es encerrar sus elementos entre corchetes: 1: [10, 20, 30, 40] 2: [ "spam" , "elastico" , "golondrina" ] El primer ejemplo es una lista de cuatro enteros. El segundo es una lista de tres cadenas de texto. Los elementos de una lista no tienen por que ser del mismo tipo. La siguiente lista contiene una cadena, un numero con decimales y un entero, y, maravilla de las maravillas, otra lista: 1: [ "hola" , 2.0, 5, [10, 20]] Se dice que una lista dentro de otra lista esta anidada. Las listas que contienen numeros enteros consecutivos son comunes, de manera que Python proporciona una manera sencilla de crearlas: 1: >>> range(1,5) 2: [1, 2, 3, 4] La funcion range toma dos argumentos y devuelve una lista que contiene todos los enteros entre el primero y el segundo, ¡incluyendo el primero pero no el segundo! Hay dos formas alternativas para range. Con un solo argum...

8.2. Acceso a los elementos

La sintaxis para acceder a los elementos de una lista es la misma que para acceder a los caracteres de una cadena: el operador corchetes []. La expresión dentro de los corchetes especifica el índice. Recuerde que los índices siempre comienzan en cero: 1: print numeros[0] 2: numeros[1] = 5 El operador [] puede aparecer en cualquier parte de una expresion. Cuando aparece a la izquierda de una asignacion, cambia uno de los elementos de la lista, de manera que el “unesimo” elemento de numeros, que era 123, ahora es 5. Se puede usar como índice cualquier expresion entera. 1: >>> numeros[3-2] 2: 5 3: >>> numeros[1.0] 4: TypeError: 5: sequence index must be integer Si intenta acceder (leer o modificar) un elemento que no existe, obtendra un error en tiempo de ejecución: 1: >>> numeros[2] = 5 2: IndexError: list assignment index out of 3: range Si se da un índice negativo, se cuenta hacia atras desde el final de la lista. ...

8.3. Longitud (tamaño) de una lista

La función len toma una lista y devuelve su tamaño. Es una buena idea usar este valor como límite superior de un bucle, en lugar de una constante. De esta manera, si el tamaño de la lista cambia, no habrá que estar haciendo cambios en todos los bucles; funcionaran correctamente con cualquier tamaño de lista. 1: jinetes = [ "guerra" , "hambre" , "peste" , "muerte" ] 2: i = 0 3: while i < 4: len(jinetes): 5: print jinetes[i] 6: i = i + 1 La ultima vez que se ejecuta el cuerpo del bucle, i es len(jinetes) - 1 , que es el índice del ultimo elemento. Cuando i se iguala a len(jinetes) , la condición falla y no se ejecuta el cuerpo, lo que es una cosa buena, ya que len(jinetes) no es un índice legal. Aunque una lista puede contener otra lista como elemento, la lista anidada cuenta como un elemento sencillo. El tamaño de esta lista es 4: 1: [ 'spam!' , 1, [ 'Brie' , 'Roquefort' , 'Pol le ...

8.4. Pertenencia a una lista

in es un operador booleano que comprueba la pertenencia a una secuencia. Lo usamos en la Sección 7.10 con las cadenas, pero también funciona con las listas y otras secuencias: 1: >>> jinetes = [ 'guerra' , 'hambre' , 'peste' , 'muerte' ] 2: >>> 3: 'peste' in jinetes 4: 1 5: >>> 'libertinaje' in jinetes 6: 0 Como “peste” es un miembro de la lista jinetes, el operador in devuelve verdadero. Como “libertinaje” no esta en la lista, in devuelve falso. Podemos usar not en combinacion con in para comprobar si un elemento no es miembro de una lista : 1: >>> 'libertinaje' not in jinetes 2: 1

8.5. Listas y bucles for

El bucle for que vimos en la Sección 7.3 también funciona con las listas. La sintaxis generalizada de un bucle for es: 1: for VARIABLE in LISTA: 2: CUERPO Esta sentencia es equivalente a: 1: i = 0 2: while i < len(LISTA): 3: VARIABLE = LISTA[i] 4: CUERPO 5: i = i + 6: 1 El bucle for es mas conciso porque podemos eliminar la variable de bucle, i. Aquí tenemos el bucle anterior con un bucle for : 1: for jinete in jinetes: 2: print jinete Mas aun, casi se lee igual que en español, “Para (cada) jinete en (la lista de) jinetes, imprime (el nombre del) jinete". Se puede usar cualquier expresion de lista en un bucle for : 1: for numero in range(20): 2: if numero % 2 == 0: 3: print numero 4: for fruta in 5: [ "platano" , "manzana" , "membrillo" ]: 6: print "Me gusta comer " + fruta + 7: "s!" El primer ejemplo imprime todos los numeros pares entre el 0 y el 1...

8.6. Operaciones con listas

El operador + concatena listas: 1: >>> a = [1, 2, 3] 2: >>> b = [4, 5, 6] 3: >>> c = a + b 4: >>> print c 5: [1, 2, 3, 4, 5, 6] De forma similar, el operador * repite una lista un número dado de veces: 1: >>> [0] * 4 2: [0, 0, 0, 0] 3: >>> [1, 2, 3] * 3 4: [1, 2, 3, 1, 2, 3, 1, 2, 3] En el primer ejemplo la lista [0] contiene un solo elemento que es repetido cuatro veces. En el segundo ejemplo, la lista [1, 2, 3] se repite tres veces.

8.7. Porciones (slices)

Las operaciones de porciones que vimos en la Sección 7.4 también funcionan en sobre las listas: 1: >>> lista = [ 'a' , 'b' , 'c' , 'd' , 'e' , 'f' ] 2: >>> lista[1:3] 3: [ 'b' , 'c' ] 4: >>> lista[:4] 5: [ 'a' , 'b' , 'c' , 'd' ] 6: >>> lista[3:] 7: [ 'd' , 'e' , 'f' ] 8: >>> lista[:] 9: [ 'a' , 'b' , 'c' , 'd' , 'e' , 'f' ]

8.12. Clonar listas

Si queremos modificar una lista y mantener una copia del original, necesitaremos ser capaces de hacer una copia de la lista en sí, no solo de su referencia. Este proceso a veces se denomina clonado, para evitar la ambigüedad de la palabra ”copia”. La forma mas fácil de clonar una lista es por medio del operador de porción: 1: >>> a = [1, 2, 3] 2: >>> b = [] 3: >>> b[:] = a[:] 4: >>> print b 5: [1, 2, 3] La extracción de una porción de a crea una nueva lista. En este caso, la porción consta de la lista completa. Ahora tenemos libertad de hacer cambios en b sin preocuparnos de a: 1: >>> b[0] = 5 2: >>> print a 3: [1, 2, 3] Como ejercicio, dibuje un diagrama de estado de a y b antes y después del cambio.

8.16. Cadenas y listas

Dos de las funciones mas útiles del modulo string tienen que ver con listas de cadenas. La función split divide una cadena en una lista de palabras. Por defecto, cualquier numero de caracteres de espacio en blanco se considera un límite de palabra: 1: >>> import string 2: >>> cancion = "La lluvia en Sevilla..." 3: >>> string.split(cancion) 4: [ 'La' , 'lluvia' , 'en' , 'Sevilla...' ] Se puede usar un argumento opcional llamado delimitador para especificar que caracteres se usaran como límites de palabra. El siguiente ejemplo usa la cadena ll como delimitador : 1: >>> string.split(cancion, 'll' ) 2: [ 'La ' , 'uvia en Sevi' , 'a...' ] Observe que el delimitador no aparece en la lista. La función join es la inversa de split . Toma una lista de cadenas y concatena los elementos con un espacio entre cada par: 1: >>> lista = [ 'La' ...