Básicos del Lenguaje

1

Guía de instalación y conceptos básicos

2

Archivos y slides del curso práctico de Python

3

IMPORTANTE: Instalando Ubuntu Bash en Windows para facilitarte el seguimiento del curso desde Windows.

4

¿Qué es la programación?

5

¿Por qué programar con Python?

6

Operadores matemáticos

7

Variables y expresiones

8

Presentación del proyecto

9

Funciones

10

Usando funciones en nuestro proyecto

11

Operadores lógicos

12

Estructuras condicionales

Uso de strings y ciclos

13

Strings en Python

14

Operaciones con Strings en Python

15

Operaciones con strings y el comando Update

16

Operaciones con strings y el comando Delete

17

Operaciones con strings: Slices en python

18

For loops

19

While loops

20

Iterators and generators

Estructuras de Datos

21

Uso de listas

22

Operaciones con listas

23

Agregando listas a nuestro proyecto

24

Diccionarios

25

Agregando diccionarios a nuestro proyecto

26

Tuplas y conjuntos

27

Tuplas y conjuntos en código

28

Introducción al módulo collections

29

Python comprehensions

30

Búsquedas binarias

31

Continuando con las Búsquedas Binarias

32

Manipulación de archivos en Python 3

Uso de objetos y módulos

33

Decoradores

34

Decoradores en Python

35

¿Qué es la programación orientada a objetos?

36

Programación orientada a objetos en Python

37

Scopes and namespaces

38

Introducción a Click

39

Definición a la API pública

40

Clients

41

Servicios: Lógica de negocio de nuestra aplicación

42

Interface de create: Comunicación entre servicios y el cliente

43

Actualización de cliente

44

Interface de actualización

45

Manejo de errores y jerarquía de errores en Python

46

Context managers

Python en el mundo real

47

Aplicaciones de Python en el mundo real

Conclusiones finales

48

Python 2 vs 3 (Conclusiones)

Clases bonus

49

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

Uso de listas

21/49
Recursos

Python y todos los lenguajes nos ofrecen constructos mucho más poderosos, haciendo que el desarrollo de nuestro software sea

  • Más sofisticado
  • Más legible
  • Más fácil de implementar

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

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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:
++

  • You can use the builtin list.copy() method (available since python 3.3):
new_list = old_list.copy()
  • You can slice it:
new_list = old_list[:]
  • You can use the built in list() function:
new_list = list(old_list)
  • You can use generic copy.copy():
import copy
new_list = copy.copy(old_list)
  • If the list contains objects and you want to copy them as well, use generic copy.deepcopy():
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])
10914496

id(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

Estructuras de Datos con Python 🐉

.
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

FUENTE: https://devcode.la/tutoriales/listas-python/

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

  • Las estructuras de datos, nos permiten agrupar de distintas maneras varios valores y elementos.
  • Las listas son una secuencia de valores y a diferencia de los string son mutables, es decir se puede agregar, modificar y quitar elementos.
  • Una lista no guarda en memoria los objetos, sólo la referencia a ellos.

¿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

  1. .Tutorial Python 3.6 - Cap 6.1 Más sobre Listas http://docs.python.org.ar/tutorial/3/datastructures.html#mas-sobre-listas

Codigo en GitHub del curso - List https://github.com/platzi/curso_Python3/blob/9-lists/main.py

  1. https://www.learnpython.org/en/Lists

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

  • Las listas si son mutables.
  • Accedemos a sus elementos con sus índices.
  • Las listas son referenciales, guardan una referencia de memoria.
>>> 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]

  1. Métodos para crear listas:
<Forma1>
Mylist = list()
<Forma2>
Mylist = ['','','','']
  1. Métodos para agregar elementos a lista:
<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']
  1. Metodo para Eliminar
<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