Datos Estructurados
Hasta ahora: los tipos de datos Enteros (int). Punto flotante (float). Cadenas (str). Booleanos (verdadero o falso) Ahora agregamos: Sucesión de caracteres. Sucesión de elementos. En el libro: Capítulo 5 (Pags. 145 a 209)
Ejemplos: Hola Juan Pérez 45.55 Operadores: Concatenación (+): >>> Juan + + Pérez Juan Pérez >>> nombre= Juan >>> apellido= Pérez >>> nombre_completo=nombre+ +apellido Autoincremento (+=): >>> nombre_completo= Juan >>> nombre_completo+= Pérez >>> nombre_completo Juan Pérez Repetición (*): >>> SI *5 SISISISISI Formateado (%): >>> print Perímetro %2.4f % 55.124512 55.1245 U1 Datos Estructurados Informática III - ISM -
Funciones: Conversión a entero: >>>int( 5 ) 5 Conversión a flotante: >>>float( 5.5 ) 5.5 Conversión a cadena: >>> str(44) 44 Convertir a Código ASCII >>> ord( a ) 97 Convertir de ASCII a carácter: >>> chr(97) a Métodos: Convertir a mayúsculas: >>> juan.upper() JUAN Convertir a minúscula: >>> JUAN.lower() juan Convertir a título: >>> juan m. pérez.title() Juan M. Pérez
Caracteres especiales: Carácter de escape o «contrabarra» (\) (alt+92): >>> a= una linea\notra linea >>> print a una linea otra linea
Caracteres especiales: Ejemplos: >>> print uno\tdos\ttres uno dos tres >>> print a\\b a\b >>> print Francia \ 98 Francia 98
Las cadenas no son una variable común y corriente, sino que esta formada por una sucesión de elementos individuales: los caracteres (ya sean letras, números, símbolos, espacios, etc.). Estos caracteres tienen una posición determinada por un índice (o sea un número entero) que sirve para ordenarlos e identificarlos individualmente. Los índices comienzan con el número 0 para el primer carácter y continúan con el 1 para el segundo, el 2 para el tercero y así sucesivamente. También se puede indexar una cadena de atrás para adelante, comenzando con el índice -1 para el último carácter, -2 para el anteúltimo, y así sucesivamente U1 Datos Estructurados Informática III - ISM -
Para poder individualizar un carácter dentro de una cadena, se usa el identificador de la cadena, acompañado por el operador [] y dentro de [], se ingresa el valor entero que identifica el índice del carácter buscado: U1 Datos Estructurados Informática III - ISM -
Longitud de cadena Se puede obtener el largo de una cadena utilizando la función len(cadena), que devuelve un número entero con la longitud de la cadena. Aclaración: «len» es el apócope de «length» que en inglés significa «longitud» U1 Datos Estructurados Informática III - ISM -
Cadena vacía En muchos casos es útil tener un objeto cadena vacío, o sea, sin caracteres. >>> cadena = >>> len(cadena) 0 Una cadena vacía tiene 0 cantidad de caracteres Este objeto no ocupa lugar en memoria, pero queda definido para uso posterior. Tiene el sentido análogo de una variable contador, que se inicializa en 0, y luego se usa para contar la cantidad de pasos realizados en un bucle. U1 Datos Estructurados Informática III - ISM -
Recorrer una cadena Por carácter Por índice
Extraer subcadena: El operador corchete [] también permite extraer parte de la cadena. Para ello utiliza el «operador de corte» o sea, los dos puntos «:». La sintaxis para obtener una subcadena es la siguiente: >>> cadena[i:j] Donde i es el número de la posición del primer carácter que queremos extraer y j es la posición +1 del último carácter que deseamos extraer.
Extraer subcadena U1 Datos Estructurados Informática III - ISM -
En Python las cadenas son inmutables, es decir, no se puede modificar un elemento de la misma >>> cadena= Hola, mundo >>> cadena[2] = L ERROR! Si deseamos modificar un objeto de tipo cadena debemos, en realidad, crear un nuevo objeto cadena a partir de la cadena a modificar >>> cadena=cadena[:1]+ L +cadena[3:]
Cómo se representa una cadena en memoria En el caso de las variables flotantes o enteras, las mismas apuntan a un valor en una dirección en memoria, por ejemplo: >>> a = 2 >>> b = 3.25 Decimos que a apunta a 2 y que b apunta a 3.25 Para los objetos cadena, la referencia es distinta: >>> c = Una cadena En cada celda de memoria se pueden almacenar un escalar (por ejemplo, los identificadores a y b pueden representarse directamente en memoria), pero las cadenas poseen N cantidad de escalares.
Cómo se representa una cadena en memoria Para subsanar esto, Python referencia el nombre del identificador con una posición en memoria, donde empiezan a guardarse los caracteres que forman la cadena: Decimos que a apunta a la posición en memoria 2100 Como la dirección en memoria (2100) es un escalar, lo podemos almacenar como referencia del identificador cadena. Entonces la variable a del tipo cadena, apunta a la posición en memoria donde empiezan los datos de la cadena.
Cómo se representa una cadena en memoria Este tipo de referencia es útil porque nos permite ahorrar memoria, por ejemplo: >>> a= Hola >>> b= a Tenemos que a apunta a una posición en memoria y que b apunta a la misma posición, por lo tanto no tenemos que almacenar nuevos datos en memoria para b, sino referenciar la posición de a: Decimos que a y b apuntan a la posición en memoria 2100
Secuencias de todo tipo de variables Valores entre corchetes [] y separados por coma. Ejemplos: >>> numeros = [1,2,3] >>> nombres = [ Mario, Jorge, María ] >>> expresiones = [1/6, 5+5, 1] >>> lista_vacia = [] Acceso: >>> numeros[0] 1 >>> nombres [-2] Jorge >>> expresiones [len(expresiones)-1] 1 >>> lista_vacia []
Operadores (muy similar a Cadenas) Concatenación (+) Repetición (*) Sublista ([i:j]) Concatenación Repetición Sublista
Operadores de comparación Igualdad (==) Desigualdad (!=)
Recorrer una lista Por elemento Por índice
Agregar elementos a listas >>> append(elemento) ventaja, es mejor que concatenar con (+ o +=)
Editar elementos de una lista Eliminar elemento de una lista
De Cadena a Lista función split De Lista a Cadena función join
Pertenencia de un elemento a una lista Se necesita buscar un elemento dentro de una lista, para ello se ingresa el mismo y se recorre la lista hasta encontrarlo por comparación:
Pertenencia de un elemento a una lista Por qué este código no funciona? U1 Datos Estructurados Informática III - ISM -
Listas como vectores matemáticos Si los elementos de una lista son números reales, podemos imitar el comportamiento y las operaciones de los vectores matemáticos en el espacio R N. Por ejemplo, para R 3: Ԧv = v x v y vz, para v x. v x y v x R v = [vx,vy,vz] U1 Datos Estructurados Informática III - ISM -
Listas como vectores matemáticos Suma de vectores. Ԧv + w = v x v y vz + w x w y w z = v x + w x v y + w y v z + w z v = [vx,vy,vz] w = [wx,wy,wz] suma = [vx+wx,vy+wy, vz+wz] U1 Datos Estructurados Informática III - ISM -
Listas como vectores matemáticos Suma de vectores en RN: Ԧv + w = v 1 v 2 v 3 + w 1 w 2 w 3 = v 1 + w 1 v 2 + w 2 v 3 + w 3 Necesitaremos usar bucles para completar y sumar los vectores: N = int(raw_input( Ingrese cantidad de componentes )) v = [] #vectores vacíos, se completan dentro del bucle w = [] for i in range(n): #Completo vector v: valor = float(raw_input( Ingrese %dº valor para vector v %i+1)) v.append(valor) for i in range(n): #Completo vector w: valor = float(raw_input( Ingrese %dº valor para vector w %i+1)) w.append(valor) for i in range(n): #sumo entre elementos correspondientes valor = v[i] + w[i] #o sea v[0]+w[0], v[1]+w[1],, v[n-1]+w[n-1] suma.append(valor) U1 Datos Estructurados Informática III - ISM -
Listas como vectores matemáticos + Producto interno: esta operación entre dos vectores genera un número escalar (R N R) v 1 w 1 Ԧv w = v 2 v 3 w 2 w 3 = v 1 w 1 + v 2 w 2 + + v n w n N = int(raw_input( Ingrese cantidad de componentes )) v = [] #vectores vacíos, se completan dentro del bucle w = [] for i in range(n): #Completo vector v: valor = float(raw_input( Ingrese %dº valor para vector v %i+1)) v.append(valor) for i in range(n): #Completo vector w: valor = float(raw_input( Ingrese %dº valor para vector w %i+1)) w.append(valor) suma = 0.0 #ya que es una sumatoria, necesitamos inicializar el acumulador for i in range(n): #sumo entre elementos correspondientes valor = v[i] * w[i] #o sea v[0]*w[0], v[1]*w[1],, v[n-1]*w[n-1] suma+=valor #agregamos el valor a la suma total U1 Datos Estructurados Informática III - ISM - print Producto interno de los vectores: %2.2f %suma
Disposición de valores en filas y columnas. Las matrices son básicamente listas cuyos elementos son listas. >>> M =[[1,2,3],[2,12,6],[1,0,-3],[0,-1,0]] >>> M[1] [2, 12, 6] #acceso a fila >>> M[1][0] 2 #acceso a elemento
Definición: Ejemplo: matríz de 2x2 con valores nulos >>> M=[[0,0],[0,0]] Cuando necesitamos mayor cantidad de valores: >>> M=[0]*3 [0,0,0] >>> M=[M]*3 [ [0,0,0], [0,0,0], [0,0,0] ] >>> M[0][0]=1 [[1,0,0],[1,0,0],[1,0,0] CUIDADO! Definición correcta: U1 Datos Estructurados Informática III - ISM -
Dimensiones de una matriz. Mediante la función len() se puede obtener la cantidad de elementos de una matriz, o sea, el número de filas. Como cada elemento de la matriz es una lista, para obtener el número de columnas se obtiene la longitud de un elemento de la matriz (o sea, una lista). Cantidad de filas Cantidad de columnas
Suma (y resta) de matrices:
Producto de matrices: