El Zen de Python
Es una colección de 20 principios de software que influyen en el diseño del Lenguaje de Programación Python, de los cuales 19 fueron escritos por Tim Peters en junio de 1999.
El Zen de Python está escrito como la entrada informativa número 20 de las Propuestas de Mejoras de Python (PEP, Python Enhancement Proposals), y se puede encontrar en el sitio oficial de Python.
Los principios son:
- Bello es mejor que feo.
- Explícito es mejor que implícito.
- Simple es mejor que complejo.
- Complejo es mejor que complicado.
- Plano es mejor que anidado.
- Espaciado es mejor que denso.
- La legibilidad es importante.
- Los casos especiales no son lo suficientemente especiales como para romper las reglas.
- Sin embargo la practicidad le gana a la pureza.
- Los errores nunca deberían pasar silenciosamente.
- A menos que se silencien explícitamente.
- Frente a la ambigüedad, evitar la tentación de adivinar.
- Debería haber una, y preferiblemente solo una, manera obvia de hacerlo.
- A pesar de que eso no sea obvio al principio a menos que seas Holandés.
- Ahora es mejor que nunca.
- A pesar de que nunca es muchas veces mejor que *ahora* mismo.
- Si la implementación es difícil de explicar, es una mala idea.
- Si la implementación es fácil de explicar, puede que sea una buena idea.
- Los espacios de nombres son una gran idea, ¡tengamos más de esos!+
Sets
Los sets o conjuntos se utilizan para almacenar varios elementos en una sola variable.
Los Sets son uno de los 4 tipos de datos incorporados en Python que se utilizan para almacenar colecciones de datos, los otros 3 son List, Tuple y Dictionary, todos con diferentes calidades y usos.
Un conjunto es una colección desordenada, inalterable (Los elementos establecidos no se pueden modificar, pero puede eliminar elementos y agregar elementos nuevos) y no indexada.
Los Sets o conjuntos:
- Se pueden modificar
- No tienen un orden
- No pueden tener elementos duplicados
set_countries = {"col", "mex", "bol", "col"}
# en la consola asi tengamos repetidos dentro de la variable no aparecera
print(set_countries)
print(type(set_countries))
set_numbers = {1, 2, 3, 443, 23}
print(set_numbers)
set_types = {1, "hola", False, 12.12}
#el orden no importa
print(set_types)
set_from_string = set("hola")
print(set_from_string)
set_from_string = set("hoola")
print(set_from_string)
set_from_tuples = set(("abc", "cbv", "as", "abc"))
print(set_from_tuples)
numbers = [1,2,3,1,2,3,4]
# la lista la convertimos a un set
set_numbers = set(numbers)
print(set_numbers)
# ya que tenemos los número unicos los regresamos a su forma de lista
unique_numbers = list(set_numbers)
print(unique_numbers)
~/Python-102$ python 01_set.py
{'col', 'mex', 'bol'}
{1, 2, 3, 23, 443}
{False, 1, 12.12, 'hola'}
{'l', 'a', 'h', 'o'}
{'l', 'a', 'h', 'o'}
{'as', 'cbv', 'abc'}
{1, 2, 3, 4}
[1, 2, 3, 4]
~/Python-102$
Modificando Sets
Funciones de set:
- add(): Añade un elemento.
- update(): Añade cualquier tipo de objeto iterable como: listas, tuplas.
- discard(): Elimina un elemento y si ya existe no lanza ningún error.
- remove(): Elimina un elemento y si este no existe lanza el error “keyError”.
- pop(): Nos devuelve un elemento aleatorio y lo elimina y si el conjunto está vacío lanza el error “key error”.
- clear(): Elimina todo el contenido del conjunto.
set_countries = {"col", "mex", "bol", "col"}
size = len(set_countries)
print(size)
print("col" in set_countries)
print("pe" in set_countries)
# add
set_countries.add("pe")
print(set_countries)
set_countries.add("pe")
print(set_countries)
# update
set_countries.update({"ar", "ecua", "pe"})
print(set_countries)
#remove
set_countries.remove("col")
print(set_countries)
set_countries.remove("ar")
# si un elemento no se encuentra puedes usar discard para que python se siga ejecutando a pesar del error
set_countries.discard("arg")
print(set_countries)
set_countries.add("arg")
print(set_countries)
#con clear limpiamos todo el conjunto, no queda nada
set_countries.clear()
print(set_countries)
print(len(set_countries))
~/Python-102$ python 02_crud_set.py
3
True
False
{'col', 'pe', 'mex', 'bol'}
{'col', 'pe', 'mex', 'bol'}
{'col', 'pe', 'mex', 'ar', 'ecua', 'bol'}
{'pe', 'mex', 'ar', 'ecua', 'bol'}
{'pe', 'mex', 'ecua', 'bol'}
{'pe', 'mex', 'arg', 'ecua', 'bol'}
set()
0
~/Python-102$
Operaciones set
- Union(set): Realiza la operación “union” entre dos conjuntos. La unión entre dos conjuntos es sumar los elementos de estos sin repetir elementos. Esta operación también se puede realizar con el signo “|” (pipe): set_a | set_b.
- Intersection(set): Realiza la operación “intersection” entre dos conjuntos. La intersección entre dos conjuntos es tomar unicamente los elementos en común de los conjuntos. Esta operación tambien se puede realizar con el signo “&”: set_a & set_b.
- Difference(set): Realiza la operación “difference” entre dos conjuntos. La diferencia entre dos conjuntos es restar los elementos del segundo conjunto al primero. Esta operación tambien se puede realizar con el signo “–”: set_a – set_b.
- Symmetric_difference(set): Realiza la operación “symmetric_difference” entre dos conjuntos. La diferencia simétrica entre dos conjutnos consta de restar todos los elementos de ambos exceptuando el elemento en común. Esta operación tambien se puede realizar con el signo “^”: set_a ^ set_b. Solo une los elementos que no tienen en comun.
NOTA: No se pueden realizar operaciones con otras colecciones de datos, únicamente entre conjuntos.
set_a = {"col", "mex", "bol"}
set_b = {"pe", "bol"}
set_c = set_a.union(set_b)
print(set_c)
print(set_a | set_b)
set_c = set_a.intersection(set_b)
print(set_c)
print(set_a & set_b)
set_c = set_a.difference(set_b)
print(set_c)
print(set_a - set_b)
set_c = set_a.symmetric_difference(set_b)
print(set_c)
print(set_a ^ set_b)
~/Python-102$ python 03_operations.py
{'col', 'pe', 'mex', 'bol'}
{'col', 'pe', 'mex', 'bol'}
{'bol'}
{'bol'}
{'col', 'mex'}
{'col', 'mex'}
{'col', 'pe', 'mex'}
{'col', 'pe', 'mex'}
~/Python-102$