Encuentro8 Asincrono
Encuentro8 Asincrono
Encuentro8 Asincrono
El bucle for tiene una variante muy especial que puede procesar las listas de manera
muy efectiva. Echemos un vistazo a eso.
Supongamos que desea calcular la suma de todos los valores almacenados en la lista
miLista.
La variable i toma los valores 0, 1,2,3, y 4, y luego indexa la lista, seleccionando los
elementos siguientes: el primero, segundo, tercero, cuarto y quinto.
Cada uno de estos elementos se agrega junto con el operador += a la variable suma,
dando el resultado final al final del bucle.
Observa la forma en que se ha empleado la función len(), hace que el código sea
independiente de cualquier posible cambio en el contenido de la lista.
pág. 1
¿Qué sucede aquí?
• La instrucción for especifica la variable utilizada para navegar por la lista (i)
seguida de la palabra clave in y el nombre de la lista siendo procesado
(miLista).
• A la variable i se le asignan los valores de todos los elementos de la lista
subsiguiente, y el proceso ocurre tantas veces como hay elementos en la lista.
• Esto significa que usa la variable i como una copia de los valores de los
elementos, y no necesita emplear índices.
• La función len() tampoco es necesaria aquí.
Imagina que necesitas reorganizar los elementos de una lista, es decir, revertir el orden
de los elementos: el primero y el quinto, así como el segundo y cuarto elementos serán
intercambiados. El tercero permanecerá intacto.
variable1 = 1
variable2 = 2
variable2 = variable1
variable1 = variable2
pág. 2
variable1 = 1
variable2 = 2
auxiliar = variable1
variable1 = variable2
variable2 = auxiliar
Python ofrece una forma más conveniente de hacer el intercambio, echa un vistazo:
variable1 = 1
variable2 = 2
variable1, variable2 = variable2, variable1
Ahora puedes intercambiar fácilmente los elementos de la lista para revertir su orden:
[5, 3, 8, 1, 10]
Se ve bien con cinco elementos.
¿Seguirá siendo aceptable con una lista que contenga 100 elementos? No, no lo hará.
pág. 3
• Hemos intercambiado el elemento i (desde el principio de la lista) por el que
tiene un índice igual a (longitud-i-1) (desde el final de la lista); en nuestro
ejemplo, for i igual a 0 la (longitud-i-1) da 4; for i igual a 3, da 3: esto es
exactamente lo que necesitábamos.
• Las listas son extremadamente útiles y las encontrarás muy a menudo.
Resumen
1. La lista es un tipo de dato en Python que se utiliza para almacenar múltiples objetos.
Es una colección ordenada y mutable de elementos separados por comas entre
corchetes, por ejemplo:
miLista = [1, 2, 3, 4]
del miLista[2]
print(miLista) # salida: [1, 2, 4]
del miLista # borra toda la lista
5.Las listas pueden ser iteradas mediante el uso del bucle for, por ejemplo:
pág. 4
6. La función len() se puede usar para verificar la longitud de la lista, por ejemplo:
del miLista[2]
print (len(miLista)) # la salidas es 4
resultado = funcion(argumento),
resultado = data.method(arg).
Ordenamiento Burbuja
Ahora que puedes hacer malabarismos con los elementos de las listas, es hora de
aprender como ordenarlos. Se han inventado muchos algoritmos de clasificación, que
difieren mucho en velocidad, así como en complejidad. Vamos a mostrar un algoritmo
muy simple, fácil de entender, pero desafortunadamente, tampoco es muy eficiente. Se
usa muy raramente, y ciertamente no para listas extensas.
En las siguientes secciones, ordenaremos la lista en orden ascendente, de modo que los
números se ordenen de menor a mayor.
pág. 5
Ahora observa el segundo y el tercer elemento. Están en las posiciones equivocadas.
Tenemos que intercambiarlos:
Vamos más allá y observemos los elementos tercero y cuarto. Una vez más, esto no es
lo que se supone que es. Tenemos que intercambiarlos:
Ahora comprobemos los elementos cuarto y quinto. Si, ellos también están en las
posiciones equivocadas. Ocurre otro intercambio:
El primer paso a través de la lista ya está terminado. Todavía estamos lejos de terminar
nuestro trabajo, pero algo curioso ha sucedido mientras tanto. El elemento más grande,
10, ya ha llegado al final de la lista. Ten en cuenta que este es el lugar deseado para el.
Todos los elementos restantes forman un lío pintoresco, pero este ya está en su lugar.
Ahora, por un momento, intenta imaginar la lista de una manera ligeramente diferente,
es decir, de esta manera:
Observa - El 10 está en la parte superior. Podríamos decir que flotó desde el fondo
hasta la superficie, al igual que las burbujas en una copa de champán. El método de
clasificación deriva su nombre de la misma observación: se denomina ordenamiento de
burbuja.
pág. 6
Ahora comenzamos con el segundo paso a través de la lista. Miramos el primer y el
segundo elemento, es necesario un intercambio:
La lista ya está ordenada. No tenemos nada más que hacer. Esto es exactamente lo que
queremos.
Como puedes ver, la esencia de este algoritmo es simple: comparamos los elementos
adyacentes y, al intercambiar algunos de ellos, logramos nuestro objetivo.
Codifiquemos en Python todas las acciones realizadas durante un solo paso a través de
la lista, y luego consideraremos cuántos pases necesitamos para realizarlo. No hemos
explicado esto hasta ahora, pero lo haremos pronto.
pág. 7
Ordenando una lista
¿Cuántos pases necesitamos para ordenar la lista completa?
pág. 8
Python, sin embargo, tiene sus propios mecanismos de clasificación. Nadie necesita
escribir sus propias clases, ya que hay un número suficiente de herramientas listas para
usar.
[2, 4, 6, 8, 10]
Como puedes ver, todas las listas tienen un método denominado sort(), que las ordena
lo más rápido posible. Ya has aprendido acerca de algunos de los métodos de lista
anteriormente, y pronto aprenderás más sobre otros.
1. Puedes usar el método sort() para ordenar los elementos de una lista, por ejemplo:
lst = [5, 3, 1, 2, 4]
print(lst)
lst.sort ()
print(lst) # salida: [1, 2, 3, 4, 5]
pág. 9
2. También hay un método de lista llamado reverse(), que puedes usar para invertir la
lista, por ejemplo:
lst = [5, 3, 1, 2, 4]
print(lst)
lst.reverse()
print (lst) # salida: [4, 2, 1, 3, 5]
Queremos que lo memorices, ya que puede afectar tus programas futuros y causar
graves problemas si se olvida o se pasa por alto.
El programa:
Imprime la lista2.
pág. 10
La asignación: lista2 = lista1copia el nombre de la matriz, no su contenido. En efecto,
los dos nombres (lista1 y lista2) identifican la misma ubicación en la memoria de la
computadora. Modificar uno de ellos afecta al otro, y viceversa.
Rodajas Poderosas
Afortunadamente, la solución está al alcance de su mano: su nombre es rodaja.
Una rodaja es un elemento de la sintaxis de Python que permite hacer una copia nueva
de una lista, o partes de una lista.
Su salida es [1].
Esta parte no visible del código descrito como [:] puede producir una lista
completamente nueva.
miLista[inicio:fin]
Como puedes ver, se asemeja a la indexación, pero los dos puntos en el interior hacen
una gran diferencia.
Una rodaja de este tipo crea una nueva lista (de destino), tomando elementos de la lista
de origen: los elementos de los índices desde el principio hasta el fin-1.
Nota: no hasta el fin, sino hasta fin-1. Un elemento con un índice igual a fin es el primer
elemento el cual no participa en la segmentación.
Es posible utilizar valores negativos tanto para el inicio como para el fin(al igual que en
la indexación).
miLista = [10, 8, 6, 4, 2]
nuevaLista = miLista [1:3]
print(nuevaLista)
pág. 11
La lista nuevaLista contendrá inicio-fin (3-1=2) elementos, los que tienen índices
iguales a 1 y 2 (pero no 3)
miLista[inicio:fin]
Para repetir:
miLista = [10, 8, 6, 4, 2]
nuevaLista = miLista [1:-1]
print(nuevaLista)
Si el inicio especifica un elemento que se encuentra más allá del descrito por fin (desde
el punto de vista inicial de la lista), la rodaja estará vacía:
miLista = [10, 8, 6, 4, 2]
nuevaLista = miLista [-1:1]
print(nuevaLista)
pág. 12
Si omites inicio en tu rodaja, se supone que deseas obtener un segmento que
comienza en el elemento con índice 0.
miLista[:fin]
miLista[0:fin]
miLista = [10, 8, 6, 4, 2]
nuevaLista = miLista [:3]
print(nuevaLista)
Del mismo modo, si omites el fin en tu rodaja, se supone que deseas que el segmento
termine en el elemento con el índice len(miLista).
miLista[inicio:]
miLista[inicio:len(miLista)]
miLista = [10, 8, 6, 4, 2]
nuevaLista = miLista[3:]
print(nuevaLista)
Rodajas: continuación
Como hemos dicho antes, el omitir inicio y fin hace una copia de toda la lista:
miLista = [10, 8, 6, 4, 2]
nuevLista = miLista [:]
print(nuevLista)
pág. 13
El resultado del fragmento es: [10, 8, 6, 4, 2].
miLista = [10, 8, 6, 4, 2]
del miLista[1:3]
print(miLista)
miLista = [10, 8, 6, 4, 2]
del miLista[:]
print(miLista)
Echa un vistazo:
miLista = [10, 8, 6, 4, 2]
del miLista
print(miLista)
elem in miLista
elem not in miLista
pág. 14
El segundo (not in) comprueba si un elemento dado (su argumento izquierdo) está
ausente en una lista - el operador devuelve True en este caso.
El primero de ellos intenta encontrar el mayor valor en la lista. Mira el siguiente código.
El código puede ser reescrito para hacer uso de la forma recién introducida del ciclo
for:
for i in miLista:
if i > mayor:
mayor = i
print(mayor)
pág. 15
El programa anterior realiza una comparación innecesaria, cuando el primer elemento
se compara consigo mismo, pero esto no es un problema en absoluto.
print(mayor)
La pregunta es: ¿Cuál de estas dos acciones consume más recursos informáticos: solo
una comparación o partir casi todos los elementos de una lista?
for i in range(len(miLista)):
Encontrado = miLista[i] == Encontrar
if Encontrado:
break
if Encontrado:
print("Elemento encontrado en el índice", i)
else:
print("ausente")
Nota:
Supongamos que has elegido los siguientes números en la lotería: 3, 7, 11, 42, 34, 49.
pág. 16
Los números que han salido sorteados son: 5, 11, 9, 42, 3, 49.
print(aciertos)
Nota:
vehiculosDos = vehiculosUno
del vehiculosUno[0] # borra 'carro'
print(vehiculosDos) # salida: ['bicicleta', 'moto']
2) Si deseas copiar una lista o parte de la lista, puede hacerlo haciendo uso de
rodajas(slicing):
pág. 17
3) También puede utilizar índices negativos para hacer uso de rodajas. Por
ejemplo:
4) Los parámetros inicio y fin son opcionales al partir en rodajas una lista:
lista[inicio:fin], por ejemplo:
miLista = [1, 2, 3, 4, 5]
rodajaUno = miLista [2:]
rodajaDos = miLista [:2]
rodajaTres = miLista [-2:]
miLista = [1, 2, 3, 4, 5]
del miLista [0:2]
print(miLista) # salida: [3, 4, 5]
del miLista[:]
print(miLista) # elimina el contenido de la lista, genera: []
pág. 18