Está en la página 1de 7

Práctica 10

Programación con Python al estilo C,


(parte 2 de 2)
(Rev 1.0, 2021-1, 03/11/20)

Objetivos
Que el alumno se familiarice con las listas en Python.

● Cadenas de texto

● Listas y tuplas

● Listas compactas

Teoría
1 Colecciones
Una colección es un grupo de objetos relacionados entre sí y referenciados bajo un mismo nombre. Python cuenta con
diversas clases de colecciones:

• Cadenas de texto.

• Listas.

• Tuplas.

• Listas compactas (generador).

• Diccionarios (mapas asociativos).

En esta práctica vamos a ver todos menos el último.

1.1. Cadenas de texto


Una cadena de texto es una secuencia de caracteres. Una secuencia organiza sus elementos con algún orden en
particular. Esto quiere decir, que no todas las colecciones de Python son secuencias.

Al igual que en C una cadena de texto debe encerrarse entre doble comillas. De hecho existen dos formas más de
declarar cadenas, pero por brevedad no las veremos. Ejemplos de cadenas serían:

“Hola mundo”
“Hi, I’m your professor”
“Esto es una cadena que contiene muchas palabras.”
2

Se puede accesar a los elementos individuales de las cadenas de la misma forma que se hace en C, es decir, con un
índice entero entre corchetes. También dicho índice empieza en cero. Una particularidad de Python es que el índice
puede ser negativo. El último elemento de la cadena es -1, el penúltimo -2, el antepenúltimo -3, y así sucesivamente.

cadena = “hola mundo”


cadena[0] → h
cadena[1] → o

cadena[9] → o

cadena[-1] → o
cadena[-2] → d

cadena[-10] → h

1.1.1 Slicing
En Python se pueden seleccionar subcadenas utilizando un rango entre corchetes. Siguiendo con nuestra variable
cadena:

cadena[1:4] → ola
cadena[:4] → hola
cadena[5:] → mundo

1.1.2 Concatenación
En Python dos o más cadenas se pueden concatenar (juntar) utilizando al operador ‘ +’:

cadena1 = “Esta es “
cadena2 = “la segunda parte de la práctica”
cadena3 = cadena1 + cadena2 → Esta es la segunda parte de la práctica

También puedes usar sumar y asignar una cadena a otra con el operador ‘+=’. cadena2 debe existir antes de realizar la
asigmación:

cadena1 = “Hola “
cadena2 = “”
cadena2 += cadena1 → Hola
cadena2 += “mundo” → Hola mundo

1.1.3 Repetición
Una cadena se puede repetir determinado número de veces utilizando al operador ‘ *’:

cadena1 = “hola “

Estructura de Datos y Algoritmos I, 2017-2, Práctica 10. Elaboró: M. en I. Fco. Javier Rodríguez G.
3

cadena2 = cadena1 * 3 → hola hola hola

1.1.4 Comparación
Para comparar dos cadenas se pueden utilizar los mismos operadores relacionales que se usan para números enteros o
reales:

“hola” == “hola” → True


“hola” != “hello” → True
“ho” < “hola” → True (debido a que “ho” tiene dos letras, mientras que “hola” tiene 4)

1.1.5 Operador in
El operador in se utiliza para probar la membresía de un elemento en una colección. En otras palabras pregunta: ¿el
elemento x se encuentra en la colección C?:

vocales = “aeiou”
“a” in vocales → True
“b” in vocales → False
“ab” in “abcd” → True
“ab” in “acbd” → False

1.1.6 Las cadenas son inmutables


Esto es, una cadena no puede cambiar una vez que ha sido declarada. Si necesitas cambiar un elemento de una cadena
tendrás que hacer una copia en otra variable de cadena:

cadena1 = “hola mundo”


cadena1[0] = “x” → Error, se está intentando mutar (modificar) a la cadena
cadena2 = “x” + cadena1[1:] → xola mundo

1.1.7 Funciones y métodos sobre cadenas


Una función de cadena toma a una de éstas y devuelve algún dato interesante, por ejemplo, la cantidad de caracteres
en ella:

cad = “programando en Python”


len (cad) →21

Las cadenas en Python son objetos, y como tales pueden recibir mensajes. Un mensaje es un método, y un método le
dice a Python que realice alguna operación sobre la cadena. Existe una buena cantidad de métodos que se le pueden
aplicar a las cadenas, lo cual es bastante útil a la hora de procesarlas. Los métodos difieren de las funciones en la

Estructura de Datos y Algoritmos I, 2017-2, Práctica 10. Elaboró: M. en I. Fco. Javier Rodríguez G.
4

forma de invocarlas:

cad = “hola mundo”


cad.find (“m”) → 5
cad.find (“un”) → 6
cad.upper () → HOLA MUNDO

Aquí puede encontrar una referencia a las funciones y métodos sobre cadenas.

1.1.8 Iterando sobre cadenas


Se puede iterar sobre los elementos individuales de una cadena utilizando un ciclo for:

cad = “hola mundo”


for c in cad:
print (c)

1.2. Listas
En Python, al igual que las cadenas, una lista es una colección de elementos, y también son secuencias (sus elementos
siguen un orden en particular). Una lista es mutable (a diferencia de las cadenas que no lo son) porque se pueden
cambiar o borrar elementos particulares de ésta. Y a diferencia de C y de las propias cadenas de Python, una lista no
tiene que ser homogénea, es decir, una misma lista puede contener cualquier tipo de datos al mismo tiempo.

Para crear una lista se utilizan los corchetes, []:

miLista = [1, 2, 6, 5, 9, 3]
otraLista = [“lunes”, “martes”, “miercoles”]
unaListaDeListas = [[1, 2, 3], [4, 5, 6], [7, 8, 9]
unaListaHeterogenea = [“hola”, 4, 3.1416, ‘a’]

1.2.1 Índices y slicing


Las mismas propiedades de los índices y del slicing de las cadenas se aplican también en las listas.

1.2.2 Operador in
Las mismas propiedades del operador in se aplican también en las listas.

1.2.3 Iterando sobre listas


Las mismas propiedades del ciclo for se aplican también en las listas.

1.2.4 Funciones sobre listas


Algunas funciones sobre listas: len(C), min(C), max(C), sum(C). Ésta última únicamente funciona sobre listas de
enteros.

Estructura de Datos y Algoritmos I, 2017-2, Práctica 10. Elaboró: M. en I. Fco. Javier Rodríguez G.
5

1.2.5 Mutabilidad de las listas


Como se mencionó previamente, las listas en Python sí son mutables porque efectivamente es posible cambiar sus
elementos o eliminarlos de la lista:

miLista = [1, 2, 3, 4]
miLista[1] = 10 → [1, 10, 3, 4]
miLista.append (6) → [1, 10, 3, 4, 6]
miLista.append ([100, 200, 300]) → [1, 10, 3, 4, 6, 100, 200, 300]
miLista.remove (4) → [1, 10, 3, 6, 100, 200, 300]
miLista.index (200) → 5 (índice de donde está el valor 200)

otraLista = [5, 9, 1]
sorted (otraLista) → [1, 5, 9]

Aquí se puede encontrar una referencia a las funciones y métodos sobre listas.

1.3. Tuplas
Las tuplas son esencialmente listas, pero inmutables. Su equivalente más cercano en C son las estructuras, porque en
C es imposible eliminar los campos de una estructura, una vez ésta se ha declarado. Dicho de otra forma, podemos
cambiar el valor de un campo cuando queramos, pero no podemos deshacernos de ese campo. Las tuplas funcionan
igual. Para declarar una tupla se usan paréntesis y comas:

unaTupla = (1,) → tupla de un campo


otraTupla = (1, “hola”, 3.14) → tupla con tres campos

1.3.1 Operaciones que no modifican a las tuplas


Las mismas operaciones sobre listas que no realizan modificaciones también se pueden aplicar sobre las tuplas:

• Algunos operadores: + y *

• Índices y slicing

• Membresía (in) e iteraciones (for)

• Las funciones len(), min() y max()

1.3.2 Inmutabilidad de las tuplas


Debido a su naturaleza inmutable se necesita guardar una copia de la tupla original modificada en una nueva tupla, al
igual que se hizo con las cadenas:

unaTupla = (1, “hola”, 3.1415926, ‘a’)


otraTupla = unaTupla[1:] → (“hola”, 3.1415926, ‘a’)

Estructura de Datos y Algoritmos I, 2017-2, Práctica 10. Elaboró: M. en I. Fco. Javier Rodríguez G.
6

1.4. Listas compactas


Python incluye un mecanismo similar al concepto matemático para crear y trabajar con listas compactas. Para
aprender más sobre listas compactas puedes darle click aquí. Por ejemplo, para crear la siguiente lista compacta la
cual está en formato matemático:
S = { x² | x E (1..9), x² > 5}

y que se lee: S es el conjunto de todos los números x², tal que x pertenezca al conjunto (1..9) y se cumpla que x² > 5.
Así, el conjunto S estaría formado por los números en el rango (3*3, 4*4, …, 9*9). Los números 1 y 2 quedaron fuera
de la lista porque no cumplen la condición 1*1 > 5 y 2*2 > 5, respectivamente.

En Python esta lista quedaría definida de la siguiente manera:

s = [x**2 for x in range(1,9) if x*x > 5] → [9, 16, 25, 36, 49, 64]

2 Pre-Laboratorio
1. Ejercita todos los ejemplos vistos en el apartado Teoría.

Entregable: Ninguno

3 In-Laboratorio
1. Escribe un programa en Python que implemente el algoritmo de Búsqueda Lineal. Pregunta al usuario por el
número de elementos en la lista y pide uno por uno. A continuación pide la llave (el elemento a buscar).
Escribe una función Blineal() que reciba la lista y la llave y devuelva el valor booleano true si la llave estuvo
en la lista, y false en caso contrario. Imprime “El valor (no)se encontró” dependiendo del resultado arrojado
por la función.

2. Modifica el programa anterior para que pida la llave de búsqueda una y otra vez, y ésta sea aplicada sobre la
misma lista. Esto tiene el fin de que pruebes una o más llaves dentro o fuera de la lista y no la estés
capturando (la lista) cada vez. Para salir del ciclo puedes utilizar el valor centinela -1.

3. Modifica el programa anterior para que la función Blineal() devuelva una tupla [bool,int]. Si la llave sí se
encontró en la lista, digamos en la posición 3, entonces la función deberá devolver [True, 3]; en caso
contrario deberá devolver [False, -1]. Recuerda que las tuplas requieren paréntesis, (), pero la notación
general para indicarlas son los corchetes, [].

4. Escribe una función esPar() que reciba un valor entero positivo, y devuelva True/False en caso de serlo/no
serlo. En tu driver program avisa qué número fue o no fue par. Utiliza una lista de valores fijos.

5. Escribe un programa que indique qué números de una lista son primos o no. Escribe una función esPrimo()
que reciba un valor entero positivo, y devuelva True/False en caso de serlo/no serlo. Escribe otra función
Primos() que reciba una lista de números, y devuelva una lista con los valores que hayan sido primos.
Ninguna de estas funciones deberá imprimir nada. En tu driver programa crea una lista de números para
alimentar a la función Primos(), y a continuación deberás imprimir todos y cada uno de los elementos
devueltos por ella.

Estructura de Datos y Algoritmos I, 2017-2, Práctica 10. Elaboró: M. en I. Fco. Javier Rodríguez G.
7

4 Post-Laboratorio
A partir del siguiente pseudocódigo escribe una función Burbuja() que reciba una lista de elementos
desordenados (enteros, reales o caracteres) y devuelva una lista ordenada:
Para i = 0 hasta n-2{
Para j = 0 hasta n-2-i{
Si A[j+1] < A[j]{
Intercambia( A[j+1], A[j] )
}
}
}

En tu driver program alimentarás a dicha función con listas de números enteros y reales (una lista por tipo), y
deberás presentar los resultados para cada una.

5 Entregables
Deberás entregar los ejercicios 3,4,5 de la sección IN-LABORATORIO, y el Post-Laboratorio.

Estructura de Datos y Algoritmos I, 2017-2, Práctica 10. Elaboró: M. en I. Fco. Javier Rodríguez G.

También podría gustarte