Tambien se puede generar una copia de la lista con lista[::]
paises
Out[20]: ['España', 'Alemania', 'Suiza']
eu = paises[::]
paises[0] = 'Portugal'
paises
Out[23]: ['Portugal', 'Alemania', 'Suiza']
eu
Out[24]: ['España', 'Alemania', 'Suiza']
Básicos del Lenguaje
Guía de instalación y conceptos básicos
Archivos y slides del curso práctico de Python
IMPORTANTE: Instalando Ubuntu Bash en Windows para facilitarte el seguimiento del curso desde Windows.
¿Qué es la programación?
¿Por qué programar con Python?
Operadores matemáticos
Variables y expresiones
Presentación del proyecto
Funciones
Usando funciones en nuestro proyecto
Operadores lógicos
Estructuras condicionales
Uso de strings y ciclos
Strings en Python
Operaciones con Strings en Python
Operaciones con strings y el comando Update
Operaciones con strings y el comando Delete
Operaciones con strings: Slices en python
For loops
While loops
Iterators and generators
Estructuras de Datos
Uso de listas
Operaciones con listas
Agregando listas a nuestro proyecto
Diccionarios
Agregando diccionarios a nuestro proyecto
Tuplas y conjuntos
Tuplas y conjuntos en código
Introducción al módulo collections
Python comprehensions
Búsquedas binarias
Continuando con las Búsquedas Binarias
Manipulación de archivos en Python 3
Uso de objetos y módulos
Decoradores
Decoradores en Python
¿Qué es la programación orientada a objetos?
Programación orientada a objetos en Python
Scopes and namespaces
Introducción a Click
Definición a la API pública
Clients
Servicios: Lógica de negocio de nuestra aplicación
Interface de create: Comunicación entre servicios y el cliente
Actualización de cliente
Interface de actualización
Manejo de errores y jerarquía de errores en Python
Context managers
Python en el mundo real
Aplicaciones de Python en el mundo real
Conclusiones finales
Python 2 vs 3 (Conclusiones)
Clases bonus
Entorno Virtual en Python y su importancia: Python en el mundo real
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
David Aroesti
Python y todos los lenguajes nos ofrecen constructos mucho más poderosos, haciendo que el desarrollo de nuestro software sea
Estos constructos se llaman Estructuras de Datos que nos permiten agrupar de distintas maneras varios valores y elementos para poderlos manipular con mayor facilidad.
Las listas las vas a utilizar durante toda tu carrera dentro de la programación e ingeniería de Software.
Las listas son una secuencia de valores. A diferencia de los strings, las listas pueden tener cualquier tipo de valor. También, a diferencia de los strings, son mutables, podemos agregar y eliminar elementos.
En Python, las listas son referenciales. Una lista no guarda en memoria los objetos, sólo guarda la referencia hacia donde viven los objetos en memoria
Se inician con []
o con la built-in function list
.
Aportes 79
Preguntas 7
Tambien se puede generar una copia de la lista con lista[::]
paises
Out[20]: ['España', 'Alemania', 'Suiza']
eu = paises[::]
paises[0] = 'Portugal'
paises
Out[23]: ['Portugal', 'Alemania', 'Suiza']
eu
Out[24]: ['España', 'Alemania', 'Suiza']
Cuidado Fuente de Bugs!!!
Cuando se hace una lista igual a otra, al cambiar una se modifica también la otra:
countries = ['Ecuador','Venezuela','Colombia','Argentina']
global_countries = countries
countries[0] = 'Guatemala'
countries
’Guatemala’, ‘Venezuela’, ‘Colombia’, ‘Argentina’]
global_countries
[‘Guatemala’, ‘Venezuela’, ‘Colombia’, ‘Argentina’]
global_countries[3] = 'Panama'
countries
[‘Guatemala’, ‘Venezuela’, ‘Colombia’, ‘Panama’]
global_countries
[‘Guatemala’, ‘Venezuela’, ‘Colombia’, ‘Panama’]``
Para evitarlo se debe utilizar la libreria copy
import copy
global_countries = None
global_countries = copy.copy(countries)
countries
[‘Guatemala’, ‘Venezuela’, ‘Colombia’, ‘Panama’]
global_countries
[‘Guatemala’, ‘Venezuela’, ‘Colombia’, ‘Panama’]
countries[0] = 'Honduras'
countries
[‘Honduras’, ‘Venezuela’, ‘Colombia’, ‘Panama’]
global_countries
[‘Guatemala’, ‘Venezuela’, ‘Colombia’, ‘Panama’]
Diferentes formas de copiar una lista
Este hilo detalla las formas de copiar una lista https://stackoverflow.com/questions/2612802/how-to-clone-or-copy-a-list
++Copy the list, you have various possibilities:
++
new_list = old_list.copy()
new_list = old_list[:]
new_list = list(old_list)
import copy
new_list = copy.copy(old_list)
import copy
new_list = copy.deepcopy(old_list)
Jugando un poco encontré que aunque si bien las listas son objetos que viven en diferentes lugares en la memoria, los objetos que contienen si son iguales vivirán en el mismo lugar en memoria, por ejemplo:
Python 3.6.9 (default, Nov 7 2019, 10:44:02)
[GCC 8.3.0] on linux
Type “help”, “copyright”, “credits” or “license” for more information.
a =[1,2,3,4,5]
b = [1,2,3,4,5]
id(a[0])
10914496id(b[0])
10914496
140264765992776
id(b)
140264766007112
el id de a y de b son diferentes, pero id(a[0]) y id(b[0]) son iguales
Cosas curiosas que uno encuentra!
para los que vienen de otros lenguajes las list se manejan como arrays en otros lenguajes no es lo mismo pero es parecido para comprenderlo
otra manera de copiar objetos iterables como listas o strings es utilizando la notación slice [::] por ejemplo
countries = ["v","m","c"]
global_countries = countries[::]
con esta notación obtenemos el mismo resultado que utilizar la libreria copy
Cuando vi que Aroesti se cambio la camisa, contesto indirectamente a mi pregunta, de si grabo todo el curso en una jornada.
Tambien se puede copiar una lista asi, nueva_lista = vieja_lista.copy()
Creo que seria mejor si se usa la palabra, iterar en ves de ciclar no se pero se escucha bastante extraño xD
una lista es un objeto que funciona como iterador
Si se quieren modificar los elementos de una dos listas que comparten los mismos elementos, y que cuando se haga dicho cambio solo afecte a la lista que estamos modificando, se utiliza el modulo copy.
Crear una variable que tome el valor de la lista para que ambas variables apunten al mismo valor en memoria. Si se cambia un elemento de la lista, se cambia en las dos variables.
En esta pagina viene un poco mas de informacion sobre el uso de listas: https://automatetheboringstuff.com/2e/chapter4/ …Me parece interesante como complemento al video…
Casos para declarar una lista que depende del original y cuando podemos hacer una copia independiente
import copy
lista=[1,2,3,4]
lista_dependiente = lista
lista_independiente1 = lista.copy()
lista_independiente2 = lista[:]
print ("lista: ",lista,"\nlista_dependiente: ", lista_dependiente,"\nlista_independiente1: ",lista_independiente1,"\nlista_independiente2: ",lista_independiente2)
lista[0] = 0
print ("\nlista: ",lista,"\nlista_dependiente: ", lista_dependiente,"\nlista_independiente1: ",lista_independiente1,"\nlista_independiente2: ",lista_independiente2)
Resultado:
lista: [1, 2, 3, 4]
lista_dependiente: [1, 2, 3, 4]
lista_independiente1: [1, 2, 3, 4]
lista_independiente2: [1, 2, 3, 4]
lista: [0, 2, 3, 4]
lista_dependiente: [0, 2, 3, 4]
lista_independiente1: [1, 2, 3, 4]
lista_independiente2: [1, 2, 3, 4]
l
.
Las estructuras de datos estándar que incorpora Python son: list
, tuple
, dict
, y set
.
.
En estas clases veremos el uso de las listas las cuales pueden aplicar diferentes métodos para aumentar su funcionalidad. Los métodos son:
append(). Agrega un elemento al final de la lista.
list.append(item)
clear(). Quita todos los elementos de la lista.
list.clear()
copy(). Regresa (copia), los elementos de la lista.
new_list = list.copy()
count(). Regresa el número de veces que un elemento aparece en la lista.
list.count(element)
extend(). Agrega elementos de un iterable(lista, tupla, string, etc) al final de la lista actual.
list1.extend(iterable)
index() Regresa el índice del primer elemento con el valor espcificado.
list.index(element, start, end)
insert(). Agrega elementos en una posición de índice específica.
list.insert(i, elem)
pop(). Quita elementos de una posición específica y permite agregarlos a otra lista.
list.pop(index)
remove(). Elimina el primer elemento que encuentra en la lista con el valor dado. Regresa None
.
list.remove(element)
reverse(). Invierte el orden de la lista. No toma argumentos.
list.reverse()
sort(). Ordena la lista de forma ascendente o descendente(reverse = True
). No retorna valores.
list.sort(key=..., reverse=...)
tip para crear listas con range
definimos una variable que contenga a range
mi_lista = = range(10)
y pasamos la variable por la función list
list(mi_lista)
listo tendremos este output
print(mi_lista)
out
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Creo que no es necesario importar copy, las listas tienen un metodo llamado copy(), para copiar
global_countries = country.copy()
min 2:20, si son mutables porque el slider dice my_list[2] = 6? si previamente se le asigno a my_list = [1, 2, 3]?
Las listas en Python son referenciales, es decir, acceden a una referencia en memoria del objeto.
import copy
countries = ['México', 'Venezuela', 'Colombia', 'Argentina']
ages = [12, 18, 24, 34, 50]
weights = [12, 18, 24, 34, 50]
print(id(countries))
print(id(ages))
print(id(weights))
receta = ['Ensalada', 2, 'lechugas', 5, 'jitomates']
countries[0] = 'Ecuador'
name = 'David'
print(name[0])
# name[0] = 'd' # Error Los strings son inmutables
# alias, apuntan al mismo objeto
global_countries = countries
print(id(countries))
print(id(global_countries))
countries[0] = 'Guatemala'
print(countries)
print(global_countries)
# Como copiar una lista en otra lista como objeto nuevo, usamos la lib copy
print('#' * 25)
global_countries = None
global_countries = copy.copy(countries)
print(id(countries))
print(id(global_countries))
countries[0] = 'Honduras'
print(countries)
print(global_countries)
# Ciclar sobre una lista
for country in countries:
print(country)
(Apunte)
Para copiar listas podemos usar IMPORT COPY:
import copy
lista_1 = [1,2,3,4]
lista_2 = copy.copy(lista_1)
lista_1[0] = 5
lista_1 = [5,2,3,4]
lista_2 = [1,2,3,4]
Una lista es una estructura de datos y un tipo de dato en python con características especiales. Lo especial de las listas en Python es que nos permiten almacenar cualquier tipo de valor como enteros, cadenas y hasta otras funciones; por ejemplo:
lista = [1, 2.5, 'DevCode', [5,6] ,4]
Una lista es un arreglo de elementos donde podemos ingresar cualquier tipo de dato, para acceder a estos datos podemos hacer mediante un índice.
print lista[0] # 1
print lista[1] # 2.5
print lista[2] # DevCode
print lista[3] # [5,6]
print lista[3][0] # 5
print lista[3][1] # 6
print lista[1:3] # [2.5, 'DevCode']
print lista[1:6] # [2.5, 'DevCode', [5, 6], 4]
print lista[1:6:2] # [2.5, [5, 6]]
Como pueden darse cuenta podemos hasta insertar una lista dentro de otra lista.
Si no quieres estar imprimir uno por uno los elementos de una lista, puedes recorrerlo utilizando un for.
for element in lista:
print element
Muy interesante al copiar una lista solo asignandola es como si dijeramos que apuntas al mismo lugar de memoria. usando copy si creamos una lista que apunta a otro lugar de memoria pero con los mismo datos.
Buena explicación de listas. 💙
Si los Strings ocupan el mismo hueco en la memoria es por el hecho de que son inmutables, por lo tanto nunca cambiará.
Si hiciéramos dos listas iguales y ocuparan el mismo hueco en la memoria, ¿Qué pasaría en el momento en el que se cambia algún elemento de una de las listas…???
Resumiendo, que no pueden ocupar el mismo hueco
Como evitar bugs a la hora de copiar listas.
Como evitar bugs a la hora de copiar listas.
Otra forma de duplicar listas:
>>> list1 = ["one", "two", "three"]
>>> list2 = list(list1)
>>> list1 is list2
False
lista = list(paises)
lista = [i for i in paises ]
lista = paises[::]
o usando copy
Listas en Python
Los Strings son inmutables.
PELIGRO, FUENTE DE BUGS: Si hacemos algo como:
paises = ['México','Colombia','Ecuador']
countries = paises
Ahora ambas listas apuntan a la misma dirección en memoria y tienen los mismos valores, SI MODIFICAMOS UNA SE MODIFICARÁ LA OTRA TAMBIÉN
¿Cómo solucionar esto? Simplemente haciendo una copia de la lista.
paises = ['México','Colombia','Ecuador']
countries = paises[:]
Con esto ambas listas apuntan a una dirección en memoria diferente. Ya podemos modificarlas sin que la otra se vea afectada.
Cuando tenemos listas con valores iguales, pero las comparamos como objetos, son diferentes.
Las listas en Python son diferenciales, es decir que estas no guardan en memoria directamente los objetos, solo guarda la referencia de dónde viven los objetos en memoria.
para agregar un nuevo elemento ala lista se utiliza el keyword o “palabra clave” append
Eje:
pais.append(“alemania”) #aki se le dice que ala lista pais agregele un elemento llamado alemania
pais
[‘mexico’, ‘colombia’, ‘suiza’, ‘alemania’]pais2
[‘mexico’, ‘alemania’, ‘suiza’]#No afecta ala otra lista
¿se puede decir que una lista es un objeto?
Ufff genial ese modulo de copy, gracias maestro!!
Importando el modulo copy
Los Strings son inmutables como listas, son “mutables” cuando se reasigna su valor sin embargo realmente creo un nuevo objeto cuando se reasigna
Listas: Secuencias de valores.
Espero ver la creación de arreglos y como agregarlos. Había encontrado algo como:
my_list.append([2,5])
¡Gracias!
Buena documentacion
Alias
Una lista es una estructura de datos y un tipo de dato en python con características especiales. Lo especial de las listas en Python es que nos permiten almacenar cualquier tipo de valor como enteros, cadenas y hasta otras funciones.
Ejercicios realizados.
Material complementario para Listas en Python
1.Tutorial Python 3.6 - Cap 4.1.3. Listas http://docs.python.org.ar/tutorial/3/introduction.html#listas
Codigo en GitHub del curso - List https://github.com/platzi/curso_Python3/blob/9-lists/main.py
Un poco de info adicional de listas: https://devcode.la/tutoriales/listas-python/
Otra forma de hacer una copia de una lista y poder modificar los valores de cada una de las lista es con la función list, por ejemplo:
global_countries = list(countries)
Estas listas tambien se conocen como arrays.
Tal vez asi algunos lo capten mas rapido
😮 😮 :OOOOOOO DIOooss esto es lo que me pasaba xD uno nunca deja de aprender
Hola, no entiendo porque en la función list_clients(), no se usa el operador “global” para alcanzar la variable “clients” y en el resto sí.
Un saludo
Muy interesante!
muy efectivo este nuevo metodo que aprendi
Estructuras de datos: Agrupar de distintas maneras, varios valores, elementos, etc. En nuestro programa
Listas: Secuencia de valores.
*Las listas a diferencias de los strings, son mutables.
*Las listas en python: Son referenciales(No guarda en memoria directamente los objetos, guarda referencia hacia donde viven los objetos en memoria)
Hice el ejercicio de hacer una lista, de dos listas, como apuntaban a la misma direccion de memoria.
Si hacia un cambio en una se reflejaba en la otra:
Nota: Los elementos de las listas son modificables y los de los strings no.
Una lista es una estructura de datos y un tipo de dato en python con características especiales. Lo especial de las listas en Python es que nos permiten almacenar cualquier tipo de valor como enteros, cadenas y hasta otras funciones
>>> fruits = ['apple', 'banana', 'watermelon']
>>> fruits_1 = fruits>>> fruits
['apple', 'banana', 'watermelon']
>>> fruits_1
['apple', 'banana', 'watermelon']
>>> fruits[1] = 'cherry'
>>> fruits
['apple', 'cherry', 'watermelon']
>>> fruits_1
['apple', 'cherry', 'watermelon']
>>>
Forma correcta de copiar listas:
>>> import copy
>>> fruits = ['apple', 'banana', 'watermelon']
>>> fruits_1 = copy.copy(fruits)
>>> fruits
['apple', 'banana', 'watermelon']>>> fruits_1
['apple', 'banana', 'watermelon']
>>> fruits[1] = 'cherry'>>> fruits
['apple', 'cherry', 'watermelon']
>>> fruits_1
['apple', 'banana', 'watermelon']
>>>
Copiar un arreglo en Python
import copy
Cuando se crea la copia de la lista en:
global_countries = copy.copy(countries)
No se guardan en el mismo id, es decir, a pesar de que countries y global_countries contienen la misma lista en un principio, no estan apuntando al mismo lugar en memoria, es por ello que cuando se realizan los cambios, en uno no afectan al otro.
Hay diferencia en crear Lista con paréntesis " ( ) " que con " [ ] " corchetes?
newListParentesis = [1,2,3]
Vs.
newListCorchetes = [1,2,3]
<Forma1>
Mylist = list()
<Forma2>
Mylist = ['','','','']
<Forma1>
Mylist.append('Nuevo Elemento')
esta forma agrega un nuevo elemento al final de la lista
<Forma2>
Mylist.extend(otra lista)
Esta forma permite agregar una lista existente al final de la lista ya creada, ejemplo:
Lista1 = ['Pedro', 'Pablo', 'Juan']
Lista2 = ['Lucas']
Lista1.extend(lista2)
lista1
['Pedro', 'Pablo', 'Juan', 'Lucas']
Otra forma de agregar es:
<Forma3>
Mylist.insert(posición, 'nuevo elemento']
Lista1.insert(0, 'Marcos')
Lista1
['Marcos', 'Pedro', 'Pablo', 'Juan', 'Lucas']
<Valor>
Mylist.remove('Valor o Elemento')
<Indice>
Mylist.pop(indice)
En la función pop() sino se agrega indice se borra el ultimo valor de la lista
Para evitar los bugs que puede traer hacer un alias con las listas, la solución más sencilla que podemos hacer para evitar posibles inconsistencias, es asignando al alias, la lista junto con el método .copy() (en el caso del objeto listas)
Una varible que es asignada para contener otra variable con otro valor, se le llama Alias,
Hacer una reasignación con los string, no es igual que con las listas en las que hacemos: list_1[3] = 2, nos lanza un TypeError debido a que no es posible alterar una pieza singular de un string.
Cuando tenemos listas, con las mismas referencias, python marcará su valor como verdadero.
Tenemos varios mecanismos para ciclar sobre las listas[]
Las listas pueden declararse de forma literal (square brackets y su contenido) o luego con la built-in function.
Las listas son vectores, y vectores que contienen a más vectores son matrices.
Caracteresiticas de listas: Las listas se pueden acceder a través de indices, éstos indices inician en cero (0) al igual que los strings pero a diferencia de ellos son un tipo de datos mutables, para añadir mas elementos a una lista podemos utilizar el metodo append
amigos=list()
amigos.append('Pedro')
amigos[0]
'Pedro'
amigos.append('Enrique')
amigos[1]
'Enrique')
#######
la utilidad del metodo append es ingresa un nuevo valor a la lista pero al final es decir si el tamaño de la lista es de 6 y utilizamos el metodo append pasaria a sumarse +1
excelente repaso u.u
>>> countries = ['Mexico', 'Colombia', 'Velenzuela', 'Argentina', 'Peru', 'Chile']
>>> ages = [15, 18, 21, 25, 33, 53]
>>> id(countries)
140161980521664
>>> id(ages)
140161980521728
>>> wights = [15, 18, 21, 25, 33, 53]
>>> id(wights)
140161980521856
>>> receta = ['Ensalada', 2, 'lechugas', 5, 'jitomates', 3]
>>> countries[2] = 'Brasil}
File "<stdin>", line 1
>>> countries[2] = 'Brasil'
>>> countries
['Mexico', 'Colombia', 'Brasil', 'Argentina', 'Peru', 'Chile']
>>> global_countries = countries
>>> global_countries
['Mexico', 'Colombia', 'Brasil', 'Argentina', 'Peru', 'Chile']
>>> id(global_countries)
140161980521664
>>> id(countries)
140161980521664
>>> countries[3] = 'Paraguay'
>>> global_countries
['Mexico', 'Colombia', 'Brasil', 'Paraguay', 'Peru', 'Chile']
>>> countries
['Mexico', 'Colombia', 'Brasil', 'Paraguay', 'Peru', 'Chile']
>>> import copy
>>> global_countries = None
>>> global_countries
>>> countries
['Mexico', 'Colombia', 'Brasil', 'Paraguay', 'Peru', 'Chile']
>>> global_countries = copy.copy(countries)
>>> global_countries
['Mexico', 'Colombia', 'Brasil', 'Paraguay', 'Peru', 'Chile']
>>> countries
['Mexico', 'Colombia', 'Brasil', 'Paraguay', 'Peru', 'Chile']
>>> countries[3] = 'Guayana'
>>> countries
['Mexico', 'Colombia', 'Brasil', 'Guayana', 'Peru', 'Chile']
>>> global_countries
['Mexico', 'Colombia', 'Brasil', 'Paraguay', 'Peru', 'Chile']
>>> for country in countries:
... print(country)
...
Mexico
Colombia
Brasil
Guayana
Peru
Chile
Me adelante un poco 😃)
<
clients = ['pepe', 'dracula']
def createCliente(clientName):
global clients
if clientName not in clients:
clients.append(clientName)
else:
_clientExistentPrint()
listClients()
def updateClient(clientName, updatedClientName):
global clients
countList = len(clients)
if clientName in clients:
for i in range(countList):
if clients[i] == clientName:
clients[i] = updatedClientName
else:
_clientNotFoundPrint()
def deleteClient(clientName):
global clients
if clientName in clients:
clients.remove(clientName)
else:
_clientNotFoundPrint()
>
Mis observaciones
1.
Dirección de memoria de strings
s1 = "d"
s2 = "d"
Ambos tienen misma dirección de memoria
Sin embargo
s1 = "da"
s2 = "da"
s1 y s2 tienen diferente dirección de memoria
Copiar una lista por referencia
L1 = L2
Copiar una lista por valor sin usar el módulo Copy
L1 = list(L2) #Constructor
L1 = L2[:] #Slicing
L1 = L2.copy() #Método de clase
Saludos
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?