Salta al contenido principal

Listas

Sitio: Facultad de Ingeniería U.Na.M.
Curso: Informática ET241/EM241/IC241/IN241/IM204
Libro: Listas
Imprimido por: Invitado
Día: miércoles, 3 de julio de 2024, 04:29

1. Contenidos

Introducción al tipo de dato Listas: conceptos, sintaxis y usos de la misma en Python

2. Introducción

Arreglos

Un arreglo es una variable, una estructura de datos estática que no puede modificar su tamaño y cuyos miembros deben ser todos del mismo tipo. Prácticamente todos los lenguajes de programación disponen de estos contenedores de datos para facilitar los procesos de almacenamiento y acceso a grupos de datos.

Un arreglo permite tener varios datos almacenados al mismo tiempo. Entonces podemos definir a un arreglo como:

"Un conjunto de datos o una estructura de datos homogéneos que se encuentran ubicados en forma consecutiva en la memoria"  

Cuando se refiere a datos homogéneos quiere decir que LOS ARREGLOS SOLO PUEDEN TENER UN TIPO DE DATOS, por ejemplo: sólo enteros, sólo reales, sólo caracteres, etc.

Los arreglos unidimensionales se conocen como Vectores  porque tienen una sola fila o una sola columna

Los arreglos bidimensionales se conocen como Matrices porque tienen filas y columnas

VECTOR

Ejemplo 1:

Alturas [  5  ]={1.23,   3.34,   5.21,   2.23,   3.14} => Arreglo de una dimensión --> Vector de nombre Altura

Su dimensión es  5 y todos son del mismo tipo: Real.

Ejemplo 2: La imagen presenta un vector o arreglo de una dimensión de 4  elementos:

  Figura 1

Se podrán guardar 4 elementos. Observar las posiciones en el arreglo: la primera es 0 y la última 3.

  • En programación la dimensión del arreglo es N, donde 0 es la primer posición y  N-1 la última posición.



  • El acceso a un elemento del arreglo se realiza a través del nombre del arreglo y su posición. Por ejemplo: Datos [0] hace referencia al elemento que está cargado en la primera posición del arreglo Datos.
  • NO es lo mismo referirse a un elemento del arreglo que al índice del arreglo, El índice es una variable simple que nos ayuda a identificar las posiciones en un arreglo. 

MATRIZ

Figura 2

Existen arreglos de tres dimensiones. Y mas..

 Figura 3

¿Para qué necesitamos los Arreglos?. Imaginemos lo siguiente:

Figura 4

Figura 5

Evidentemente cuando algo está almacenado de una manera mas organizada, es mas fácil:

  • Buscar un elemento
  • Referenciar un elemento
  • Ordenar por criterios, por ejemplo por color.

Listas

Una Lista en Python  es similar a un arreglo, con la diferencia de que una lista soporta distintos tipos de datos.

Definición:

Una  lista es una colección de datos. En Python la listas se identifican con los corchetes y cada elemento está separado por coma. Es mutable, es decir que su contenido puede ir variando a lo largo del programa.

Ejemplos:

lista_vacia=[]   

primer_lista=["tomate", "banana", "papa"]  # ver que van Corchetes []

otra_lista=[ "tomate", 25, True, 32.5]

"Figura 6

Analizamos la imagen de la interface del Intérprete de Python:

1.  Se crea una lista de nombre: primer_lista

2. Se muestra la lista invocando solamente el nombre de la lista

3. Se muestra nuevamente la lista pero ahora utilizando la función print y pasando como argumento entre paréntesis el nombre de la lista.

Utilizando el intérprete de Python escriba:

Figura 7

Escriba ahora utilizando Spyder:

Figura 8

La salida de este Script debe ser similar a:

Figura 9

¿En el interprete -Figura 8- no hay una instrucción print  pero al presionar <ENTER>, se muestra el valor de la variable. ¿Porqué?

¿En la línea 14 de la Figura 8 se muestra el valor de a?

¿Cuál es el valor del primer elemento de la lista?

¿Cuál es el índice que se usa en la línea 11 para la Lista?

¿Que índice hace referencia  al primer elemento de la lista?

¿'tomate' que tipo de dato es?

¿ El 91 de la lista que tipo de dato es?

¿El 2.45 de la lista que tipo de dato es?

¿Qué resultado muestra por pantalla  si escribo en la línea 16 de la figura 8:

print (type(primer_lista))?

¿Cree que list está dentro de la palabras reservadas de Python?  ( help('keywords'))

¿Qué sucede si modifico la parte final del Script  tal como se muestra en la Figura 10?

Figura 10

 

 

3. Modificando..

Cambiar el valor de un elemento de la lista

Una lista no vacía tiene:

    1. Nombre de la lista: Este es el identificador que se utiliza para hacer referencia a la lista en el código.
    2. Índice: Los índices son números enteros que representan la posición de un elemento en la lista. Los índices en Python comienzan en cero.
    3. Valor de un elemento de la lista en la posición de un índice: Esto se refiere al valor almacenado en la lista en una posición específica, identificada por su índice.

Para cambiar el valor de un elemento específico, se debe referenciar a la posición indicando el número del índice Ejemplo:

Escriba en el Spyder el siguiente script:

Figura 1

¿Qué hace la línea 12?

¿Qué valor tiene el índice en la línea 12?

¿Qué valor tiene el elemento asignado en la línea 12?

4. ¿Existe...?

Comprobar si existe un elemento en la lista.

Para determinar si un elemento especificado está presente en una lista se puede utilizar la sentencia if junto al operador in

 if - in  --> ambas son palabras claves

Recordar que if se utiliza para realizar una evaluación condicional en un programa. Devuelve un valor booleano: V o F.

in: Se utiliza para verificar si un valor está presente en una secuencia (como una lista,  cadena de texto, etc.). Retorna True si el valor está presente y False si no lo está

No olvidar los dos puntos (:) al finalizar el if ya que los mismos hace que el interprete espera un conjunto o un bloque de instrucciones

Ejemplo:

Figura 1

La línea 11 se traduce como : Si existe x en mi_lista...

Si al recorrer la lista en algún momento es Verdadero , ejecuta el bloque que está sangrado. En este caso el bloque esta determinado solamente por una línea. Si es Falso no hay nada por hacer (en este ejercicio al menos.)

Gráficamente:

Figura 2


Ejercicio: escribir en la terminal la orden para listar las palabras reservadas. Controlar si se encuentra en el listado if e in
Figura 3

  1. Si al correr el script ingreso el carácter 'x' en la línea 10,¿ Mostraría un mensaje el script?
  2. Si al correr el script ingreso el carácter 'a' en la línea 10,¿ Mostraría un mensaje el script?
  3. Si al correr el script ingreso 91' en la línea 10,¿ Mostraría un mensaje el script?¿Es correcto esto?
  4. ¿Qué error obtengo si elimino la sangría de la línea 12?
  5. ¿La x de la línea 11, es la misma que la que está dentro de mi_lista definida en la línea 9?
  6. ¿Funciona el script si cambio mi_lista=["tomate", 91 , 2.45, True, 'y']?
  7. ¿Qué pasa si modifico la línea 10 por: x=int(input('Ingrese un carácter a buscar en la lista: '))? ¿Podría buscar la ocurrencia de tomate? ¿Por qué?

4.1. Operador "is"

Operadores de Identidad

Un operador de identidad se emplea para comprobar si dos variables apuntan al mismo objeto en la memoria.

is y is not son operadores de identidad.

Los operadores is y is not comprueban si dos variables hacen referencia al mismo objeto en lugar de tener valores idénticos.

Tener en cuenta que dos valores, cuando son iguales, no implica necesariamente que sean idénticos.


4.2. Operador "in"

Operadores de Pertenencia

Los operadores de pertenencia se utilizan para identificar pertenencia en alguna secuencia.

El operador in y el operador not in son operadores de Pertenencia de Python.

El operador in devuelve True si el valor especificado se encuentra en la secuencia, de lo contrario devuelve False
El operador not in devuelve True si el valor especificado no se encuentra en la secuencia. En caso contrario devuelve False.
El operador in se utilizó con la estructura repetitiva for pero puede también utilizarse de la siguiente forma:
Ejemplo 1:


Ejemplo 2:






5. Función len()

Obtener el número de elementos de una lista

La función len devuelve el número de valores de un elemento iterable en Python. Por lo tanto, si queremos imprimir el número de elementos de una lista utilizaremos la función len().  Entre los paréntesis, como argumento, se le indica el nombre de la lista.

Una función puede tener ninguno, uno o varios argumentos. 

Ejemplo:

Figura 1


 

¿Qué argumentos recibe format en la línea 16?

¿Qué argumentos recibe format en la línea 11?

¿Qué argumento recibe la función len?

6. Recorriendo listas

El recorrido de los elementos de una lista se puede realizar mediante el uso de un bucle for. 



Ejercicio: Imprimir todos los elementos de la lista, uno por uno:

Figura 1


  • ¿Qué  valores toma i en las líneas 11 y12?
  • ¿Qué rango de valores toma i en las líneas 15 y 16?
  • ¿Cuál es el argumento de format para esta última modificación?
  • ¿Qué pasa si se elimina el sangrado de la línea 15?


Recorriendo la lista con los índices

Para acceder a los elementos de la un lista se utilizan los índices.

Ejemplo:  Dada la siguiente lista: vocales=['a','e','i','o','u']
Si escribimos:
  • print(vocales[ : 2 ]) # esta línea muestra los elementos de vocales[0] y vocales[1]
  • print(vocales[ -1 ]) # esta línea muestra el último elemento!! -->  vocales[4]
  • print(vocales[ 2 : 4 ]) # esta línea muestra los valores de vocales[2] y vocales[3]
  • print(lista[ : 3])  # NO incluye el último elemento vocales[ 3 ] , sólo los elementos de  vocales[0],vocales[1] y vocales[2]



Ejemplo 1:





Ejercicio: Se pide al alumno interpretar los índices dentro de los [ ]. 

Ejemplo 2:



OBSERVACION: SI tenemos una lista de nombre lista_numero y escribimos:

for elemento in lista_numero[ : : ]  , tiene el mismo efecto que for elemento in lista_numero:

7. Métodos

Los métodos son acciones o procesos que puede realizar un objeto. 

Cada objeto tiene sus métodos. Por ejemplo, una lista es un objeto en Python.

Los métodos siempre van a estar asociados a un objeto y van a depender del tipo de objeto con el que se esté trabajando.


El objeto gato puede maullar
El objeto perro puede ladrar
objeto: gato.
método: maullar
objeto: perro
método: ladrar


7.1. Método append

Agregando elementos al final de la lista.

Append es un método. Los métodos van unidos con un punto a un objeto sobre el que se aplica el método.

Los métodos, al igual que las funciones pueden tener argumentos. Los argumentos van entre paréntesis ().

Toda lista de Python tiene el método append() el cual permite agregar un elemento al final de la lista. 

No retorna ningún elemento ni valor, además, acepta cualquier tipo de valor como elemento a agregar: número, cadena, lista, diccionario, objeto, etc.

Ejemplo:

Figura 1


  • ¿Cuál es el argumento que se pasa a append() en el código anterior?
  • ¿append() es un método o una función?
  • ¿Cómo se sabe que append() se aplica sobre la lista de nombre valores del ejemplo?
  • ¿En que posición se agrega el elemento nuevo con append?

7.2. Método: insert

Insertando elementos en una lista.

El método insert() se utiliza para insertar un elemento en una posición específica de la lista.

El método insert() funciona con dos parámetros: primero el número de posición donde se desea posicionar el elemento y después, el elemento a añadir:

Al insertar el nuevo elemento se desplazan los elementos siguientes.

 

Figura 1


  • ¿Si quiero agregar un elemento al final de la lista que método uso?
  • ¿Dónde agrega elementos  insert()?
  • ¿Cuántos argumentos necesita insert()?
  • ¿Insert() es un método o una función?
  • ¿Cómo se sabe que insert() del ejemplo se aplica sobre la lista de nombre valores?
  • ¿Puede modificar el script para que el valor a insertar sea ingresado por teclado?

7.3. Método pop

Eliminar un elemento de la lista

El método pop() en Python se utiliza para eliminar y devolver el elemento en el índice especificado de una lista.
Si no se proporciona un índice, por defecto elimina y devuelve el último elemento de la lista.

Figura 1

  • ¿Cuántos argumentos recibe pop()?
  • ¿pop() es un método o una función?
  • ¿Para qué sirve pop()?
  • ¿Qué pasa si no paso argumento a pop()?
  • ¿Podría modificar el script para que se pida ingresar por teclado el argumento de pop?

7.4. Método remove

El método remove() se utiliza para eliminar la primera aparición del elemento con el valor especificado. Si no se encuentra el elemento en la lista, se producirá un error.

Su argumento  indica el nombre del elemento , NO la posición.

Ejemplo:  

Figura 1

OBSERVACIÓN: Se debe indicar el elemento,  NO el índice!!

  • ¿El argumento que recibe remove() de que tipo puede ser? ¿Entreo, Real, String?
  • ¿Qué pasa si el argumento no se encuentra en la lista?
  • ¿Podría verificar si el argumento se encuentra en la lista?

7.5. Método clear

Limpiar el contenido de la lista

El método clear() es una función incorporada en Python que se utiliza para eliminar todos los elementos de una lista. 

Después de llamar a clear(), la lista quedará vacía, es decir, no contendrá ningún elemento.

OBSERVACIÓN: El método  clear() NO elimina la lista.  La lista sigue existiendo pero sin ningún elemento.

Figura 1

  • ¿Existe la lista luego de aplicar clear()?
  • ¿clear() es una función o método?
  • ¿Qué argumentos recibe clear()?
  • ¿Qué diferencias tiene con del?

7.6. Métodos particulares de string

En Python un string es una cadena formada por una secuencia de caracteres individuales.

String es un tipo de dato, como los son lista, diccionarios, tuplas, enteros, booleanos, etc.

Link  de métodos de string en Python: http://pyspanishdoc.sourceforge.net/lib/string-methods.html

El método split() en Python se utiliza para dividir una cadena de texto en una lista de subcadenas, utilizando un delimitador específico. Por defecto, este delimitador es el espacio en blanco, pero se puede especificar cualquier carácter o cadena de caracteres como delimitador.

Ejemplo:



8. Comando del

OBSERVACIÓN:  del  NO es un método.

Elimina el índice especificado que se pasa como argumento o la lista completa.


Figura 1

 

  • ¿del es un método o una función?
  • ¿del regresa algún valor? ¿pop regresa algún valor?
  • ¿pop puede borrar una lista completa? ¿y pop?
  • ¿Qué elemento borra pop si no le paso argumento?
  • ¿Qué borra del si se aplica sobre el nombre de una lista?


 

9. Sumando y Multiplicando Listas

OBSERVACION:

El operador + concatena listas

El operador *  permite repetir los elementos de una lista.

Figura 1



  • ¿Qué sucede si ingresamos  x=0 y ejecutamos el script?
  • ¿Tiene alguna relación con del ?
  •  ¿Qué sucede si eliminamos int de la línea 14? ¿Tira error?¿Por qué?
  • ¿La suma de listas es lo mismo que la suma en matemática?

10. Listas de Listas

Una lista puede verse con un Vector o arreglo de una dimensión.

Una Matriz puede verse como una lista formada por listas o un arreglo de más de una dimensión.

En Python se puede simular una matriz, usando listas de listas.

Ejercicio 1: Analizar el siguiente código:


Figura 1

  • Se definen dos constantes para indicar la cantidad de filas y la cantidad de columnas.
  • La variable matriz, es una lista vacía.
  • Para agregar elementos a una lista se utiliza el método append().

Se cargarán datos a la lista y cada lista que genere se agregará a la matriz, obteniéndose así una lista de listas o sea una matriz.

Al ejecutar el código se muestra por pantalla:

Figura 2

Ejercicio 2:  Analizar el siguiente código:

Figura 3

  • La matriz de nombre lista contiene dos listas, cada una de ellas es una fila de la matriz.
  • Para hacer referencia a un elemento de la matriz se utilizan la variable i y j (filas y columnas).
  • Otra manera de acceder a cada elemento de la matriz usando listas puede ser:

Figura 4

Observar las líneas  de las figuras 3 y 4  para ver las distintas maneras de hacer referencia a los elementos de la lista.

Como Recorrer  Lista de Lista

La idea es recorrer TODOS los elementos de una lista incluso dentro de otra lista:

Vamos a usar una función incorporada en Python llamada isinstance, la misma tiene 2 argumentos, el primero es el elemento del cual quiero saber el tipo y el segundo argumento es el tipo.

Veamos como sería.

La salida sería:


11. Resumen de métodos y funciones

A continuación a modo de resumen mencionamos algunos métodos y funciones relacionadas con Listas.

  • append()Add a single element to the end of the list
  • extend()Add Elements of a List to Another List
  • insert() Inserts Element to The List
  • remove()Removes item from the list
  • index()returns smallest index of element in list
  • count()returns occurrences of element in a list
  • pop()Removes element at the given index
  • reverse()Reverses a List
  • sort()sorts elements of a list
  • copy()Returns Shallow Copy of a List
  • clear()Removes all Items from the List
  • any()Checks if any Element of an Iterable is True
  • all()returns true when all elements in iterable is true
  • ascii()Returns String Containing Printable Representation
  • bool()Converts a Value to Boolean
  • enumerate()Returns an Enumerate Object
  • filter()constructs iterator from elements which are true
  • iter()returns an iterator
  • list()creates a list in Python
  • len() Returns Length of an Object
  • max()returns the largest item
  • min()returns the smallest value
  • map() Applies Function and Returns a List
  • reversed()returns the reversed iterator of a sequence
  • slice()returns a slice object
  • sorted()returns a sorted list from the given iterable
  • sum() Adds items of an Iterable
  • zip() Returns an iterator of tuples

https://www.programiz.com/python-programming/methods/list

12. Preguntas

1. Dado el siguiente código, ¿qué números se imprimirán en la pantalla?

lista=[4,1,4,2,3] 
suma=0 
for elemento in lista: 
    if elemento%2 == 0: 
        suma = suma + elemento
        print(suma)

  1.     10
  2.     4,4,8,10,10
  3.     4,8,10
  4.     4,5,9,11,14
2. Dado el siguiente código, para obtener la media en pantalla el comando correcto es:

lista=[4,1,4,2,3]
cuenta=0
resultado=0
for elemento in lista: 
  cuenta = cuenta+1
  resultado = resultado + elemento
print(resultado)

  1. print(resultado)
  2. print(cuenta)
  3. print(cuenta/resultado)
  4. print(resultado/cuenta)
3. Si tenemos el código siguiente:

Lista=[9,12,6,3,5]
print(63 in Lista)
¿Cuál será el resultado al ejecutarlo?

  1. True
  2. False
  3. SyntaxError
  4. True 63
4. ¿Cómo podemos obtener el número mayor o menor de una lista?

  1. Podemos crear una función propia para obtener el mayor o el menor de una lista usando un bucle.
  2. Podemos usar las funciones min(lista) y max(lista) sobre una lista definida previamente.
  3. Las dos anteriores son correctas.
  4. Ninguna de las anteriores es correcta.

13. Observaciones

NO USAR LISTA PARA REEMPLAZO DE RANGE

Se observó que algunos alumnos, ante la dificultad de usar la función range con los argumentos de inicio, fin e incremento, deciden usar una lista con un rango de valores como los que se generarían con range, esto está MAL y no se debe hacer por cuestiones de eficiencia. Por ejemplo, en la siguiente consigna:

Crear un secuencia de valores 1,3,5.. hasta 19.

El alumno puede hacer:

  • lista=[1,3,5,7,9,11,13,15,17,19]  #esto NO es correcto

  • range(1,20,2) #esto es correcto y mas eficiente.

Aquí está la justificación, esto es solo a nivel informativo y para aquellos que tengan inquietud.

Veamos como podemos justificar eso:


La salida de este script sería:


14. Ejercicios Propuestos

  1. Crear una lista vacía y luego inicializarla con los 5 primeros meses del año. Mostrar el tercer y cuarto mes por pantalla.

    1. Agregar al final de la lista los meses “julio “y “agosto” al final. Mostrar la cantidad total de elementos de la lista y luego solamente los 4 primeros elementos.

    2. Utilizando la función len y el índice negativo, mostrar el primer elemento.

    3. Utilizando índices, cambiar el primer elemento por “diciembre” y el tercero por “noviembre”. Mostrar la lista resultante.

  2. Crear una lista que contenga los nombres de 4 personas.

    1. Agregar un quinto nombre al final utilizando el método correspondiente.

    2. Vaciar la lista. Comprobar si quedó vacía.

  3. Crear una lista del tamaño que desee el usuario. Luego:

    1. Mostrar por pantalla cuantos elementos se cargaron.

    2. definir una constante con el numero 2 e insertar un nuevo elemento en esa ubicación (índice). Mostrar la lista resultante, luego, eliminar dicho elemento.

    3. Eliminar el último elemento de la misma utilizando el método correspondiente y mostrar la lista resultante.

  4. Cargar una lista de 7 elementos y mostrarla ordenada. Volver a mostrar la lista en sentido inverso.

  5. Definir dos listas y concatenarlas en una tercera. Mostrar la lista resultante.

  6. Crear una lista y hacer una copia de la misma.

    a) Agregar tres elementos utilizando el operador +=.

    b) Mostrar las listas.

  7. Definir una cadena con el texto: “ Hola, como estas”. Luego, dividir el string en una lista.

  8. Dada la lista L=[“papas”, “cebolla”, “morron”]. Utilizando índices mostrar la primer letra de cada uno de sus elementos. Ejemplo: p corresponde a papas.

  9. Crear tres listas de tres elementos cada una. Luego, crear una cuarta lista que tendrá como elementos cada una de las listas creadas anteriormente (lista de listas). Mostrar la lista resultante.

  10. Escribir un programa que cargue las asignaturas que Usted cursa en una lista y la muestre por pantalla.

  11.  Escribir un programa que cargue las asignaturas que Usted cursa en una lista y la muestre por pantalla el mensaje Yo estudio <asignatura>, donde <asignatura> es cada una de las asignaturas de la lista.

  12. Escribir un programa que pregunte al usuario los números ganadores de la lotería, los almacene en una lista y los muestre por pantalla ordenados de menor a mayor.

  13. Escribir un programa que almacene en una lista los números del 1 al 10 y los muestre por pantalla en orden inverso separados por comas.

  14. Escribir un programa que cargue  las 6 primeras letras del abecedario en una lista, elimine de la lista las letras que ocupe la posición ingresada por el usuario, y muestre por pantalla la lista resultante.

  15. Escribir un programa que almacene en una lista los siguientes precios, 50, 75, 46, 22, 80, 65, 8, y muestre por pantalla el menor y el mayor de los precios.

  16. Escribir un programa que permita crear una lista de palabras y que, a continuación, pida una palabra y elimine esa palabra de la lista.

  17. Escribir un programa que permita crear una lista de palabras y que, a continuación, cree una segunda lista igual a la primera, pero al revés (no se trata de escribir la lista al revés, sino de crear una lista distinta).

  18. Escribir un programa que inicialice una lista con 10 números enteros y posteriormente muestre en pantalla cada elemento de la lista junto con su cuadrado y su cubo.

  19. Escribir un programa que lea por teclado las 5 notas obtenidas por un alumno (comprendidas entre 0 y 10) A continuación, debe mostrar todas las notas, el promedio, la nota más alta que ha sacado y la meno

  20. Definir una lista con 5 frutas y mostrar.

  21. Cargar una lista con 5 frutas y mostrar.

  22. Cargar una lista con 5 elementos y rotar el primero y el cuarto.

  23. Cargar una lista con 5 valores enteros y mostrar.

  24. Cargar una lista con 5 valores, dos reales, dos enteros, dos booleanos y dos strings y mostrar por pantalla.

  25. Cargar una lista con 5 valores, dos reales, dos enteros, dos booleanos y dos strings y mostrar por pantalla, mostrar el tipo de datos de todos y de cada uno de los elementos de la lista por pantalla.

  26. Cargar una lista con tres valores de cualquier tipo de dato. Mostrar. Luego agregar un valor mas y mostrar nuevamente.

  27. Cargar una lista llamada Alumnos formada por tres listas . Cada una de las listas debe tener dos valores que son los datos de un alumno, como  nombre de alumno y legajo. Mostar el contenido de la lista.

  28. Al ejercicio anterior a la lista Alumnos, agregar otra lista mas ( nombre, legajo) y mostrar.

  29. Al ejercicio Anterior eliminar la primer lista (alumno , legajo ) y mostrar.

  30. Al ejercicio Anterior eliminar la ultima lista (alumno , legajo ) y mostrar.

  31. Cargar una lista con tres valores y usando el método insert() inserte un valor en la misma.

  32. Cargar una lista con valores reales y luego usando el método sort(), ordenar y mostrar la misma.

  33. Cargar una lista con nombres de marcas de auto, mostar y luego usando el método clear, eliminar los elementos y luego mostrar la lista.

  34. Cargar por teclado una variable,mostrar el tipo de datos, incluir esa varialbe en una  lista, mostar el tipo de datos de la misma y agregar un par de valores mas a la lista y mostrar.

  35. Crear una lista con tres nombres de modelos de autos llamada Modelos1, crear otra lista con otros modelos de autos llamada Modelos2. Crear una nueva lista llamada Modelos con la suma de las listas anteriores.

  36. Cargar una lista con 5 valores enteros y luego mostrar el mayor usando la función max.

  37. Cargar una lista con 5 nombres de  frutas  y luego usando la función len, mostrar cuantos elementos tiene la lista.

  38. Cargar una lista con 5 nombres de flores  y luego usando el método .reverse() sobre la lista invertir el orden y mostrar.

  39. Defina una lista_A con los siguientes 7 productos [lechuga, tomate, cebolla, rúcula, zapallo, papa, zanahoria. 

    1. Copie los elemento de la lista_A a una nueva lista_B

    2. Intercambie el segundo elemento de la lista_B con el quinto y el cuarto con el primero. Muestre en pantalla.
    3. A partir de la lista_A anterior reemplace la cebolla por morrón y muestre en pantalla.
    4. Remueva el cebolla de la lista_B y muestra la nueva lista.
    5. Quite la zanahoria de la lista_A y muestre en pantalla el producto eliminado y la lista final.
    6. Modifique el código del ejercicio anterior para que elimine el producto correcto sin importar la posición en que se encuentra.
    7. Elimine la lista_A y vacíe la lista_B
  40. Cargue una lista 5 números enteros y verifique si un número ingresado por teclado se encuentra en la lista, mostrando por pantalla el valor True en caso de ser correcto.
    1. Invierta la lista
    2. Ordene la lista de menor a mayor.
    3. Ordene la lista de mayor a menor.
  41. Defina la siguiente lista: [1,4,4,5,9,4,6,4,8,7,3,4]. Escriba un código que cuente la cantidad de veces que se repite un número ingresado por teclado.

  42. A la lista anterior inserte un elemento ingresado por teclado en la cuarta posición.

  43. Defina una lista con los siguientes elementos: un número entero, un número real, una lista vacía y un string.

    1. Agregue el entero 2, el flotante 3.0 y un string cualquiera a la lista vacía, los cuales se ingresan por teclado.

    2. Verifique si el elemento flotante 3 se encuentra en la lista mostrando True o False por pantalla.

    3. Convierta la primer letra del string de la lista que se encuentra dentro de la lista en mayúscula.

    4. Vuelva a dejar vacía la lista interna.

  44. Declarar una lista con listas, de manera que se pueda pensar como una matriz de 4x4. Luego debe cargar los valores de la matriz ingresando fila columna. Los valores a ingresar DEBEN ser mayores a cero. Si un valor ya fue cargado, debe pedir reingreso.  Cuando se hayan cargado todos los valores de la matriz se muestra la matriz, una fila por línea y se finaliza el script.

15. Ejercicios Resueltos


15.1. Cargar y sacar de lista.

Crear un programa que permita crear una lista cuyos valores serán ingresados por teclado hasta que el usuario ingrese un 0. Este valor 0 no debe formar parte de la lista. 
Luego:
1. Ingresar un valor y si se encuentra en la lista eliminarlo. 
2. Mostrar la lista.
Una solución propuesta sería:

15.2. Cargar lista

Crear una lista vacía y cargarle valores reales hasta que se ingrese el cero.

1.Mostrar la lista. 

2. Luego, hallar el promedio de los valores ingresados.

Una solución propuesta sería:

15.3. Lista con for

Definir una lista que contenga una lista con 10 valores enteros. Hacer un script que  Informe de cuántos de ellos son superiores a 100.

Una solución propuesta sería:


15.4. Listas con sueldos por turno

Una empresa divide el trabajo en dos turnos (mañana y tarde) en las que trabajan 6 empleados (3/turno). Agrupar los sueldos de los empleados en dos listas y mostrar después las listas por consola.

Una propuesta de solución sería:


15.5. Lista mayor y menor

1. Realizar un programa que permita cargar una lista de n elementos enteros. 

2. Ordenarla de mayor a menor e imprimir los resultados obtenidos. 

3.  Informar también del número mayor y del número menor.

Una solución propuesta sería:


15.6. Lista con nombres de países y habitantes

Realizar un programa que permita cargar n países y la cantidad de habitantes que residen en cada uno. Imprimir cada país con su número de habitantes correspondiente.

Una solución propuesta sería:


15.7. Listas con listas serie

Realizar un programa que cree una lista de 30 elementos. El primer elemento es una lista con un entero, el segundo es una lista con dos enteros, etc. 

La lista debería tener la siguiente estructura

[[1], [1, 2], [1, 2, 3], …]

Una solución propuesta sería:


15.8. Mostrar el último de una lista

Definir  una lista con otras listas dentro por ejemplo :

lista=[["carlos","paco"], ["luis","jacobo"], ["carlos","manuel"]]

Después imprimir el último y la anteúltimo valor

Una solución propuesta:

15.9. Lista de alumnos y notas

Realizar un programa que permita cargar los nombres de 5 alumnos y sus notas respectivas. Después, imprimir los nombres y las notas de cada alumno.

Una solución propuesta sería:


15.10. Cargar lista con reales y string

Se desea cargar una lista con valores reales y string. Se proponen dos métodos, uno con excepciones y otro con método de string isdecimal().


15.11. Fibonacci 1 de 3

Almacenar los términos de la Sucesión de Fibonacci con bucle while hasta valores menores a un número ingresado por teclado. Para simplificar el ejercicio vamos a asumir que se ingresa un  número entero y no un valor de otro tipo.

Aquí va una solución propuesta:

Figura 6

Consigna 3:

Calcular la sumatoria y mostrar de los n primeros términos de Fibonacci. Para simplificar el ejercicio vamos a asumir que se ingresa un número entero y no un valor de otro tipo.

Para este tipo de ejercicio vemos que se ingresan la cantidad de términos que se quieren generar y acumular o sumar, por lo tanto sería mejor resolver con el ciclo for.

  • Alternativa 1: resuelto con for

Figura 7

Pese a que no se recomienda resolver con while igualmente se podría hacer, pero vemos que estamos usando un contador dentro del while siendo que el for es la herramienta adecuada, al margen de eso, planteamos una solución para que el alumno entienda las diferencias entre lo que se puede hacer y lo que corresponde hacer.

  • Alternativa 2: resuelto con while (no recomendado para ESTA consigna)

 

Figura 8

15.12. Fibonaccio 2 de 3

Un alumno, luego de la clase de bucles y el ejemplo de Fibonacci, plantea el siguiente problema:

"Encontrar los primeros 10 números primos de la serie de Fibonacci."

Una posible solución, bastante eficiente, sería la siguiente:

# ------------------------------------------------------------------------ #
# Semilla inicial, evitamos arrancar con 0 y 1, ya que 1 no es primo
a, b = 1, 1
# Lista para guardar los primos hallados
primos = []
while True:
    # PARTE PARA FIBONACCI
    # C es el valor actual bajo análisis
    # Como 1 no se considera primo, se comienza desde el siguiente
    c=a+b
    a, b = b, c # Actualizo semilla para la próxima iteración
    
    # PARTE PARA PRIMOS
    # El límite para la búsqueda de divisores es raiz cuadrada de C
    # Si hasta ese punto no existe un divisor distinto de 1 o sí mismo,
    # el número es primo. Es un teorema fácilmente demostrable
    esPrimo = True
    for i in range(2,int(c**(1/2))+1):
        if c%i == 0:
            esPrimo = False
            # Si existe un divisor, deja de ser primo.
            # Interrumpo el análisis del número
            break
    if esPrimo:
        primos.append(c)
        if len(primos) == 10:
            # Finaliza el while cuando encuentro los 10 primos
            break  
print(primos)
# ------------------------------------------------------------------------ #

Notar que en este tipo de problemas, es crucial evitar iteraciones innecesarias, ya que, de ser así, el tiempo necesario para hallar la solución incrementa considerablemente (el décimo primo es bastante grande). El ejemplo es especial para repasar o entender el concepto de "código eficiente". Verificar los tiempos de demora respecto a un código implementado por otra persona, que no haya visto la solución obviamente :) .

Al ejecutar este código, se obtiene la siguiente lista:

[2, 3, 5, 13, 89, 233, 1597, 28657, 514229, 433494437]

Para terminar de comprender qué es eso de "código eficiente", a continuación, se dejar un script con varias modificaciones al algoritmo. Permitiendo observar la diferencia en cuánto al tiempo de ejecución que requiere cada uno para llegar al mismo resultado. Lo pueden probar en sus propias máquinas.

SCRIPT

NOTA: En el Script pueden modificar la variable "primos_buscar", a fines de indicar cuántos primos se quieren de la serie de Fibonacci. Lo dejo así para darle versatilidad a la prueba y que ajusten el parámetro en base a las características de su PC. Con 9 primos debería ir bien. De ahí en más... la Variante 3 cada vez demorará más (que es la que demora mucho en un principio, ahora se explica qué es esto. En realidad, cualquiera de las variantes comienzan a demorar más, pero esta es la peor de todas).

Al ejecutar el script, podrán ver algo similar a lo siguiente:

# CASO A: 9 primeros primos


Como se aprecia en la figura, los tiempos crecen con cada variante. La Variante 1 corresponde al código optimizado. La Variante 2 tiene comentado el break que ahorra ciclos en el for que busca divisores. La Variante 3 considera para la búsqueda de divisores, hasta el valor del número que se está comprobando. En los 2 primeros casos, el tiempo de demora es tan pequeño que el programa lo redondea a 0 segundos, puede verse que la cantidad de ciclos se duplica de todas maneras. El último caso demora 240 milisegundos aproximadamente, y la cantidad de ciclos crece abismalmente.

# CASO B: 10 primeros primos

Al querer buscar 1 primo más, los tiempos y ciclos crecen exponencialmente. Los tiempos dependen de cada PC, pero la cantidad de ciclos será la misma.


Notar que la Variante 1 (la optimizada), demora casi 4 milisegundos en hallar la solución. La Variante 2 demora 21 milisegundos, mientas que la Variante 3 un total de 214 segundos. Los cambios en el código son ínfimos, pero la diferencia es notable. Estos tiempos se justifican con la cantidad de ciclos que se cumplen en los bucles, para hallar los valores buscados. Notar que en la última variante, el número de ciclos es totalmente exagerado, así como el tiempo que demora (en comparación a las variantes anteriores).

Con un número bajo de primos a hallar, no se nota tanto la diferencia en cuánto a la eficiencia. Pero al necesitar procesar un volumen considerable de cálculos, es ahí cuando destaca un buen algoritmo, un código eficiente.

NOTA: El código inicial puede aún ser mejorado en gran medida, aquí se presentaron algunos conceptos a fines de que pueda inspirarse para lograrlo 😆.

15.13. Fibonacci 3 de 3

"""
Algoritmo que obtiene los 10 primeros elementos de la serie de fibonacci que son primos.
Para la resolución del problema se utiliza la condición de que si existe una división exacta (resto = 0) por un número distinto de uno o si mismo el número no es primo.
Si no hay división exacta y el cociente es menor que el divisor el número es primo y se deja de buscar.
"""
#---------------------------------------------------------------------------------------------------
a, b = 1, 1                         #Inicio en 1 'a' y 'b' porque el primer elemento primo de la serie es 2
contador = 0
primos = []
while True:
    c = a + b
    for i in range(2, c+1):   #El range() inicia en 2 porque es el primer divisor distinto de 1.
        contador += 1         #Contador de iteraciones necesarias para obtener los número primos
        if i == c:                   #Condición para que el 2 sea incluido en la lista.
            primos.append(c)
            break
        elif c % i == 0:         #Si existe una división exacta que no sea por si mismo no es primo.
            break
        elif c // i < i:             #Si el cociente es menor que el divisor y no hubo división exacta es primo.
            primos.append(c)  
            break                   #Este "break" termina la ejecución del "for" porque el número es primo.  
    if len(primos) >= 10:     
       break                       #Este "break" termina la ejecución del bucle "while".   
    a, b = b, c                   #Se realiza el intercambio de a=b y b=c.
print('Los primeros 10 números primos de la serie de fibonacci son: ')
print(primos)
print('Se necesitaron {} iteraciones para obtenerlos'.format(contador))
#--------------------------------------------------------------------------------------------------

Los primeros 10 números primos de la serie de fibonacci son:

[2, 3, 5, 13, 89, 233, 1597, 28657, 514229, 433494437]

Se necesitaron 27229 iteraciones para obtenerlos

15.14. ver estos ejercicios


1.    Definir una lista “persona” con 3 datos: Apellido, DNI, Altura en metros

2.    Modificar la lista con los siguientes datos:

3.    Apellido → reemplazar por tu apellido pero TODO EN MAYUSCULAS

4.    Altura → reemplazar por tu altura en centímetros

5.    Mostrar la lista por pantalla

Agregar elementos →.append

6.    Utilizando el método, debes añadir al final de la lista tu peso

7.    Luego de añadir tu peso, añadí tu nacionalidad

Agregar elementos → .insert

8.    Utilizando el método, debes añadir tu edad LUEGO DE TU APELLIDO

9.    Mostrar la lista por pantalla

Eliminar elementos → pop()

10. Utilizando el método, elimina de la lista tu nacionalidad

11. Utilizando el método, elimina de la lista tu DNI

Eliminar elementos → remove()

12. Utilizando el método, elimina de la lista peso

13. Mostrar la lista por pantalla

Longitud de la lista; Cantidad de elementos: Determinar la cantidad de elementos de la lista con la función len()

Concatenar listas

14. Definir otra lista “persona2” con los siguientes datos:RAMIREZ ,  25 , 178

15. Luego, definir una nueva lista “suma_personas” donde se deberá guardar la concatenación de “persona” y “persona2” Mostrar las 3 listas por pantalla

Vaciar y eliminar listas

16.  Vaciar la lista “persona” con el método clear()

17.  Eliminar la lista “persona2” con la función del

18. Mostrar la lista vacía por pantalla

Otros métodos y funciones

19. Definir la lista “números” con los siguientes números enteros: 7, 5, 2, 3, 4, 8, 6, 9, 2

20.  Buscar y mostrar por pantalla el máximo valor y su posición en la lista utilizando max() e index().

21. ¿Qué sucede si quiero hacer lo mismo para obtener el menor valor y su ubicación?

22.  Mostrar por pantalla la lista de menor a mayor utilizando sort()

23. Mostrar por pantalla la lista de mayor a menor utilizando sort() y reversed

24. Contar y mostrar por pantalla la cantidad de veces que aparece el numero 2 con count()


16. Probando código

Les acercamos una herramienta que les permite cargar su código en Python, probarlo paso a paso e ir visualizando la depuración del mismo.

La herramienta es PythonTutor. Se encuentra en el siguiente enlace: 

https://pythontutor.com/python-compiler.html#mode=edit

Les sugerimos cargar el siguiente código y probarlo paso a paso.

lista = [1,3,"hola"]
print("El id de Lista: ",id(lista))
lista2=lista
print("El id de Lista 2: ",id(lista2))
#vemos que el id de lista y lista2 son iguales => son lo mismo!!!
lista[0]="pepe"
print(lista)
print(lista2)
lista3=[1,3,"hola"]
print("El id de Lista 3: ",id(lista3))
lista4=lista3.copy()
print("El id de Lista 4: ",id(lista4))
#Vemos que como usamos el .copy lista3 y lista 4 tienen el mismo contenido al inicio
#pero NO son la misma varialbe!! el cambio de una NO impacta en la otra.
lista3[0]="pepe"
print(lista3)
print(lista4)

Este ejemplo permite visualizar la diferencia entre asignar una lista a otra y el método copy() utilizado en listas.

Haga clic aqui


Aquí explicamos como utilizar esa herramienta.

Para poder ingresar su código deberá ingresar al link y elegir la opción "Edit Code & Get AI Help"

editar

Esto les permitirá ingresar el codigo propuesto mas arriba y verá:

imagen2

Luego deberá probar la opción: Visualizar ejecución

Allí verá la imagen y podrá ir ejecutando las instrucciones con clic en el botón Next (circulo) y visualizando lo almacenado realmente en memoria (cuadro en verde)

imagen3

Dejamos como desafío entender este código: