Guía completa de Python 2025 (1/3): tipos de datos

Guía completa de Python 2025 (1/3): tipos de datos

📚 **Esta entrada es parte de la serie _Guía completa de Python_**, dividida en tres capítulos que se leen en orden:

> * 👉 **Parte 1: Tipos de datos**

* Parte 2: Operadores, control de flujo y funciones

* Parte 3: Clases, objetos y temas avanzados

1. Resumenlink image 1

Vamos a hacer una breve introducción a Python, explicando los tipos de datos que tenemos, los operadores, el uso de funciones y de clases. Además, veremos cómo usar los objetos iterables, cómo usar módulos, etc.

python

2. Tipos de datos de Pythonlink image 2

Existen 7 tipos de datos en Python

  1. De tipo texto: str
  2. Numéricos: int, float, complex
  3. Secuencias: list, tuple, range
  4. Mapping: dict
  5. Sets: set, frozenset
  6. Booleanos: bool
  7. Binarios: bytes, bytearray, memoryview

Podemos obtener el tipo de dato mediante la función type()

	
< > Input
Python
type(5.)
Copied
>_ Output
			
float

Python es un lenguaje de tipado dinámico, es decir, puedes tener una variable de un tipo y luego asignarle otro tipo

	
< > Input
Python
a = 5
type(a)
Copied
>_ Output
			
int
	
< > Input
Python
a = 'MaximoFN'
type(a)
Copied
>_ Output
			
str

Python tipa las variables por ti, pero si las quieres tipar tú se puede hacer

	
< > Input
Python
b = int(5.1)
type(b), b
Copied
>_ Output
			
(int, 5)

Aunque b se ha inicializado como 5.1, es decir, debería ser de tipo float, al tiparlo nosotros a tipo int, vemos que es de tipo int y además su valor es 5

2.1. Stringslink image 3

Los strings son cadenas de caracteres; estas se pueden definir con doble comilla " o comilla simple '

	
< > Input
Python
string = "MaximoFN"
string
Copied
>_ Output
			
'MaximoFN'
	
< > Input
Python
string = 'MaximoFN'
string
Copied
>_ Output
			
'MaximoFN'

Para escribir un string muy largo y no tener una fila que ocupe mucho espacio, se puede introducir en varias líneas

	
< > Input
Python
string = """Este es un ejemplo de
como estoy introduciendo un string
en varias lineas"""
string
Copied
>_ Output
			
'Este es un ejemplo de como estoy introduciendo un string en varias lineas'
	
< > Input
Python
string = '''Este es un ejemplo de
como estoy introduciendo un string
en varias lineas'''
string
Copied
>_ Output
			
'Este es un ejemplo de como estoy introduciendo un string en varias lineas'

Sin embargo, vemos que en medio ha metido el carácter del salto de línea. Si usamos la función print() veremos cómo ya no aparece

	
< > Input
Python
print(string)
Copied
>_ Output
			
Este es un ejemplo de
como estoy introduciendo un string
en varias lineas

Como hemos dicho, los strings son cadenas de caracteres, por lo que podemos navegar e iterar a través de ellos

	
< > Input
Python
for i in range(10):
# Se indica a la función print que cuando imprima no termine con un salto de
# linea para escribir todo en la misma linea
print(string[i], end='')
Copied
>_ Output
			
Este es un

Podemos obtener la longitud de nuestro string mediante la función len()

	
< > Input
Python
len(string)
Copied
>_ Output
			
73

Chequear si hay algún string determinado dentro del nuestro

	
< > Input
Python
'ejemplo' in string
Copied
>_ Output
			
True

Los strings tienen ciertos atributos útiles, como poner todo en mayúsculas

	
< > Input
Python
print(string.upper())
Copied
>_ Output
			
ESTE ES UN EJEMPLO DE
COMO ESTOY INTRODUCIENDO UN STRING
EN VARIAS LINEAS

Todo en minúsculas

	
< > Input
Python
print(string.lower())
Copied
>_ Output
			
este es un ejemplo de
como estoy introduciendo un string
en varias lineas

Reemplazar caracteres

	
< > Input
Python
print(string.replace('o', '@'))
Copied
>_ Output
			
Este es un ejempl@ de
c@m@ est@y intr@duciend@ un string
en varias lineas

Obtener todas las palabras

	
< > Input
Python
print(string.split())
Copied
>_ Output
			
['Este', 'es', 'un', 'ejemplo', 'de', 'como', 'estoy', 'introduciendo', 'un', 'string', 'en', 'varias', 'lineas']

Puedes ver todos los métodos de los strings en este enlace

Otra cosa útil que se puede hacer con los strings es concatenarlos

	
< > Input
Python
string1 = 'Maximo'
string2 = 'FN'
string1 + string2
Copied
>_ Output
			
'MaximoFN'

Antes explicamos que el carácter \n correspondía a un salto de línea, este carácter especial corresponde a una serie de caracteres especiales llamados Escape Characters. Veamos otros

Si declaramos un string con doble comilla y queremos añadir una doble comilla dentro del string, usamos el escape character \"

	
< > Input
Python
print("Este es el blog de "MaximoFN"")
Copied
>_ Output
			
Este es el blog de "MaximoFN"

Lo mismo con la comilla simple, añadimos \'

	
< > Input
Python
print('Este es el blog de 'MaximoFN'')
Copied
>_ Output
			
Este es el blog de 'MaximoFN'

Ahora tenemos el problema de si queremos añadir el carácter \ ya que, como hemos visto, es un escape character, así que lo solucionamos poniendo doble barra (backslash) \

	
< > Input
Python
print('Este es el blog de \\MaximoFN\\')
Copied
>_ Output
			
Este es el blog de \MaximoFN\

Ya vimos antes el escape character de nueva línea \n

	
< > Input
Python
print('Este es el blog de \nMaximoFN')
Copied
>_ Output
			
Este es el blog de
MaximoFN

Si queremos escribir desde el inicio de línea añadimos \r

	
< > Input
Python
print('Esto no se imprimirá \rEste es el blog de MaximoFN')
Copied
>_ Output
			
Este es el blog de MaximoFN

Si queremos añadir un espacio grande (sangría) usamos \t

	
< > Input
Python
print('Este es el blog de \tMaximoFN')
Copied
>_ Output
			
Este es el blog de MaximoFN

Podemos borrar un carácter con \b

	
< > Input
Python
print('Este es el blog de \bMaximoFN')
Copied
>_ Output
			
Este es el blog deMaximoFN

Podemos añadir el código ASCII en octal mediante \ooo

	
< > Input
Python
print('\115\141\170\151\155\157\106\116')
Copied
>_ Output
			
MaximoFN

O añadir el código ASCII en hexadecimal mediante \xhh

	
< > Input
Python
print('\x4d\x61\x78\x69\x6d\x6f\x46\x4e')
Copied
>_ Output
			
MaximoFN

Por último, podemos convertir otro tipo de dato en un string

	
< > Input
Python
n = 5
print(type (n))
string = str(n)
print(type(string))
Copied
>_ Output
			
&lt;class 'int'&gt;
&lt;class 'str'&gt;

2.2. Númeroslink image 4

2.2.1. Enteroslink image 5

Números de tipo entero

	
< > Input
Python
n = 5
n, type(n)
Copied
>_ Output
			
(5, int)

2.2.2. Floatlink image 6

Números de tipo coma flotante

	
< > Input
Python
n = 5.1
n, type(n)
Copied
>_ Output
			
(5.1, float)

2.2.3. Complejoslink image 7

Números complejos

	
< > Input
Python
n = 3 + 5j
n, type(n)
Copied
>_ Output
			
((3+5j), complex)

2.2.4. Conversiónlink image 8

Se puede convertir entre tipos de números

	
< > Input
Python
n = 5
n = float(n)
n, type(n)
Copied
>_ Output
			
(5.0, float)
	
< > Input
Python
n = 5.1
n = complex(n)
n, type(n)
Copied
>_ Output
			
((5.1+0j), complex)
	
< > Input
Python
n = 5.1
n = int(n)
n, type(n)
Copied
>_ Output
			
(5, int)

No se puede convertir un número complex a tipo int o tipo float

2.3. Secuenciaslink image 9

2.3.1. Listaslink image 10

Las listas guardan múltiples ítems en una variable. Se declaran mediante los símbolos [], con los ítems separados por comas

	
< > Input
Python
lista = ['item0', 'item1', 'item2', 'item3', 'item4', 'item5']
lista
Copied
>_ Output
			
['item0', 'item1', 'item2', 'item3', 'item4', 'item5']

Podemos obtener la longitud de una lista mediante la función len()

	
< > Input
Python
len(lista)
Copied
>_ Output
			
6

Las listas pueden tener ítems de distintos tipos

	
< > Input
Python
lista = ['item0', 1, True, 5.3, "item4", 5, 6.6]
lista
Copied
>_ Output
			
['item0', 1, True, 5.3, 'item4', 5, 6.6]

En Python se empieza a contar desde la posición 0, es decir, si queremos obtener el primer elemento de la lista

	
< > Input
Python
lista[0]
Copied
>_ Output
			
'item0'

Pero una de las cosas potentes de Python es que si queremos acceder a la última posición podemos usar índices negativos

	
< > Input
Python
lista[-1]
Copied
>_ Output
			
6.6

Si en vez de la última posición de la lista queremos la penúltima

	
< > Input
Python
lista[-2]
Copied
>_ Output
			
5

Si solo queremos un rango de valores, por ejemplo, del segundo al quinto ítem accedemos mediante [2:5]

	
< > Input
Python
lista[2:5]
Copied
>_ Output
			
[True, 5.3, 'item4']

Si se omite el primer número del rango significa que queremos desde el primer ítem de la lista hasta el ítem indicado, es decir, si queremos desde el primer ítem hasta el quinto usamos [:5]

	
< > Input
Python
lista[:5]
Copied
>_ Output
			
['item0', 1, True, 5.3, 'item4']

Si se omite el último número del rango, significa que queremos desde el ítem indicado hasta el último. Es decir, si queremos desde el tercer ítem hasta el último, usamos [3:]

	
< > Input
Python
lista[3:]
Copied
>_ Output
			
[5.3, 'item4', 5, 6.6]

Podemos escoger el rango de ítems también con números negativos, es decir, si queremos desde el antepenúltimo hasta el penúltimo usamos [-3:-1]. Esto es útil cuando se tienen listas de las que no se sabe su longitud, pero se sabe que se quiere un rango de valores del final, porque por ejemplo, la lista se ha creado con medidas que se van tomando y se quiere saber las últimas medias

	
< > Input
Python
lista[-3:-1]
Copied
>_ Output
			
['item4', 5]

Se puede comprobar si un ítem está en la lista

	
< > Input
Python
'item4' in lista
Copied
>_ Output
			
True
2.3.1.1. Editar listaslink image 11

Las listas en Python son dinámicas, es decir, se pueden modificar. Por ejemplo, se puede modificar el tercer ítem

	
< > Input
Python
lista[2] = False
lista
Copied
>_ Output
			
['item0', 1, False, 5.3, 'item4', 5, 6.6]

También se puede modificar un rango de valores

	
< > Input
Python
lista[1:4] = [1.1, True, 3]
lista
Copied
>_ Output
			
['item0', 1.1, True, 3, 'item4', 5, 6.6]

Se pueden agregar valores al final de la lista mediante el método append()

	
< > Input
Python
lista.append('item7')
lista
Copied
>_ Output
			
['item0', 1.1, True, 3, 'item4', 5, 6.6, 'item7']

O podemos insertar un valor en una posición determinada mediante el método insert()

	
< > Input
Python
lista.insert(2, 'insert')
lista
Copied
>_ Output
			
['item0', 1.1, 'insert', True, 3, 'item4', 5, 6.6, 'item7']

Se pueden unir listas mediante el método extend()

	
< > Input
Python
lista2 = ['item8', 'item9']
lista.extend(lista2)
lista
Copied
>_ Output
			
['item0', 1.1, 'insert', True, 3, 'item4', 5, 6.6, 'item7', 'item8', 'item9']

No es necesario extender la lista mediante otra lista, se puede hacer mediante otro tipo de dato iterable de Python (tuplas, sets, diccionarios, etc)

	
< > Input
Python
tupla = ('item10', 'item11')
lista.extend(tupla)
lista
Copied
>_ Output
			
['item0',
1.1,
'insert',
True,
3,
'item4',
5,
6.6,
'item7',
'item8',
'item9',
'item10',
'item11']

Podemos eliminar una posición determinada mediante el método pop()

	
< > Input
Python
lista.pop(2)
lista
Copied
>_ Output
			
['item0',
1.1,
True,
3,
'item4',
5,
6.6,
'item7',
'item8',
'item9',
'item10',
'item11']

Si no se especifica el índice, se elimina el último ítem

	
< > Input
Python
lista.pop()
lista
Copied
>_ Output
			
['item0', 1.1, True, 3, 'item4', 5, 6.6, 'item7', 'item8', 'item9', 'item10']

O se puede eliminar un ítem sabiendo su valor mediante el método remove()

	
< > Input
Python
lista.remove('item7')
lista
Copied
>_ Output
			
['item0', 1.1, True, 3, 'item4', 5, 6.6, 'item8', 'item9', 'item10']

Con la función del() se puede eliminar también un ítem de la posición indicada

	
< > Input
Python
del lista[3]
lista
Copied
>_ Output
			
['item0', 1.1, True, 'item4', 5, 6.6, 'item8', 'item9', 'item10']

Si no se indica el índice se elimina la lista completa

Con el método clear() dejo la lista vacía

	
< > Input
Python
lista.clear()
lista
Copied
>_ Output
			
[]

Se puede obtener la cantidad de ítems con un valor determinado mediante el método count()

	
< > Input
Python
lista = [5, 4, 6, 5, 7, 8, 5, 3, 1, 5]
lista.count(5)
Copied
>_ Output
			
4

También se puede obtener el primer índice de un ítem con un valor determinado mediante el método index()

	
< > Input
Python
lista = [5, 4, 6, 5, 7, 8, 5, 3, 1, 5]
lista.index(5)
Copied
>_ Output
			
0
2.3.1.2. List comprehensionlink image 12

Podemos operar a través de la lista

	
< > Input
Python
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = []
# Iteramos por todos los items de la lista
for x in fruits:
# Si el item contiene el caracter "a" lo añadimos a newlist
if "a" in x:
newlist.append(x)
newlist
Copied
>_ Output
			
['apple', 'banana', 'mango']

Otras de las cosas potentes de Python son las list comprehensions, que permiten hacer todo en una sola línea y que el código quede más compacto

	
< > Input
Python
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x for x in fruits if "a" in x]
newlist
Copied
>_ Output
			
['apple', 'banana', 'mango']

La sintaxis es la siguiente:

newlist = [expression for item in iterable if condition == True]

Se puede aprovechar para realizar operaciones en la lista original

	
< > Input
Python
newlist = [x.upper() for x in fruits if "a" in x]
newlist
Copied
>_ Output
			
['APPLE', 'BANANA', 'MANGO']
2.3.1.3. Ordenar listaslink image 13

Para ordenar listas usamos el método sort()

	
< > Input
Python
lista = [5, 8, 3, 4, 9, 5, 6]
lista.sort()
lista
Copied
>_ Output
			
[3, 4, 5, 5, 6, 8, 9]

También nos las ordena alfabéticamente

	
< > Input
Python
lista = ["orange", "mango", "kiwi", "pineapple", "banana"]
lista.sort()
lista
Copied
>_ Output
			
['banana', 'kiwi', 'mango', 'orange', 'pineapple']

A la hora de ordenar alfabéticamente, distingue entre mayúsculas y minúsculas

	
< > Input
Python
lista = ["orange", "mango", "kiwi", "Pineapple", "banana"]
lista.sort()
lista
Copied
>_ Output
			
['Pineapple', 'banana', 'kiwi', 'mango', 'orange']

Se pueden ordenar en orden descendente mediante el atributo reverse = True

	
< > Input
Python
lista = [5, 8, 3, 4, 9, 5, 6]
lista.sort(reverse = True)
lista
Copied
>_ Output
			
[9, 8, 6, 5, 5, 4, 3]

Se pueden ordenar de la manera que queramos mediante el atributo key

	
< > Input
Python
def myfunc(n):
# devuelve el valor absoluto de n - 50
return abs(n - 50)
lista = [100, 50, 65, 82, 23]
lista.sort(key = myfunc)
lista
Copied
>_ Output
			
[50, 65, 23, 82, 100]

Se puede aprovechar esto para que, por ejemplo, a la hora de ordenar no distinga entre mayúsculas y minúsculas

	
< > Input
Python
lista = ["orange", "mango", "kiwi", "Pineapple", "banana"]
lista.sort(key = str.lower)
lista
Copied
>_ Output
			
['banana', 'kiwi', 'mango', 'orange', 'Pineapple']

Se puede invertir la lista mediante el método reverse

	
< > Input
Python
lista = [5, 8, 3, 4, 9, 5, 6]
lista.reverse()
lista
Copied
>_ Output
			
[6, 5, 9, 4, 3, 8, 5]
2.3.1.4. Copiar listaslink image 14

No se pueden copiar listas mediante lista1 = lista2, ya que si se modifica lista1 también se modifica lista2

	
< > Input
Python
lista1 = [5, 8, 3, 4, 9, 5, 6]
lista2 = lista1
lista1[0] = True
lista2
Copied
>_ Output
			
[True, 8, 3, 4, 9, 5, 6]

Por lo que hay que usar el método copy()

	
< > Input
Python
lista1 = [5, 8, 3, 4, 9, 5, 6]
lista2 = lista1.copy()
lista1[0] = True
lista2
Copied
>_ Output
			
[5, 8, 3, 4, 9, 5, 6]

O hay que usar el constructor de listas list()

	
< > Input
Python
lista1 = [5, 8, 3, 4, 9, 5, 6]
lista2 = list(lista1)
lista1[0] = True
lista2
Copied
>_ Output
			
[5, 8, 3, 4, 9, 5, 6]
2.3.1.5. Concatenar listaslink image 15

Se pueden concatenar listas mediante el operador +

	
< > Input
Python
lista1 = [5, 8, 3, 4, 9, 5, 6]
lista2 = ['a', 'b', 'c']
lista = lista1 + lista2
lista
Copied
>_ Output
			
[5, 8, 3, 4, 9, 5, 6, 'a', 'b', 'c']

O mediante el método extend

	
< > Input
Python
lista1 = [5, 8, 3, 4, 9, 5, 6]
lista2 = ['a', 'b', 'c']
lista1.extend(lista2)
lista1
Copied
>_ Output
			
[5, 8, 3, 4, 9, 5, 6, 'a', 'b', 'c']

Otra forma de concatenar es repetir la tupla X veces mediante el operador *

	
< > Input
Python
lista1 = ['a', 'b', 'c']
lista2 = lista1 * 3
lista2
Copied
>_ Output
			
['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']

2.3.2. Tuplaslink image 16

Las tuplas son similares a las listas, guardan múltiples ítems en una variable, pueden contener ítems de distintos tipos, pero no se pueden modificar ni reordenar. Se definen mediante (), con los ítems separados por comas

Al no poderse modificar, hace que las tuplas se ejecuten un poco más rápido que las listas, por lo que si no necesitas modificar los datos, es mejor utilizar tuplas en vez de listas

	
< > Input
Python
tupla = ('item0', 1, True, 3.3, 'item4', True)
tupla
Copied
>_ Output
			
('item0', 1, True, 3.3, 'item4', True)

Se puede obtener su longitud mediante la función len()

	
< > Input
Python
len (tupla)
Copied
>_ Output
			
6

Para crear tuplas con un único elemento es necesario añadir una coma

	
< > Input
Python
tupla = ('item0',)
tupla, type(tupla)
Copied
>_ Output
			
(('item0',), tuple)

Para acceder a un elemento de la tupla, se procede igual que con las listas

	
< > Input
Python
tupla = ('item0', 1, True, 3.3, 'item4', True)
print(tupla[0])
print(tupla[-1])
print(tupla[2:4])
print(tupla[-4:-2])
Copied
>_ Output
			
item0
True
(True, 3.3)
(True, 3.3)

Podemos comprobar si hay un ítem en la tupla

	
< > Input
Python
'item4' in tupla
Copied
>_ Output
			
True
2.3.2.1. Modificar tuplaslink image 17

Aunque las tuplas no son modificables, se pueden modificar convirtiéndolas a listas, modificando la lista y después volver a convertirla en una tupla

	
< > Input
Python
lista = list(tupla)
lista[4] = 'ITEM4'
tupla = tuple(lista)
tupla
Copied
>_ Output
			
('item0', 1, True, 3.3, 'ITEM4', True)

Al convertirla en lista, podemos hacer todas las modificaciones vistas en las listas

Lo que sí se puede es eliminar la tupla completa

	
< > Input
Python
del tupla
if 'tupla' not in locals():
print("tupla eliminada")
Copied
>_ Output
			
tupla eliminada
2.3.2.2. Desempaquetar tuplaslink image 18

Cuando creamos tuplas, en realidad estamos empaquetando datos

	
< > Input
Python
tupla = ('item0', 1, True, 3.3, 'item4', True)
tupla
Copied
>_ Output
			
('item0', 1, True, 3.3, 'item4', True)

pero podemos desempaquetarlos

	
< > Input
Python
item0, item1, item2, item3, item4, item5 = tupla
item0, item1, item2, item3, item4, item5
Copied
>_ Output
			
('item0', 1, True, 3.3, 'item4', True)

Si queremos sacar menos datos que la longitud de la tupla, añadimos un *

	
< > Input
Python
item0, item1, item2, *item3 = tupla
item0, item1, item2, item3
Copied
>_ Output
			
('item0', 1, True, [3.3, 'item4', True])

Se puede poner el asterisco * en otra parte si, por ejemplo, lo que queremos es el último ítem

	
< > Input
Python
item0, item1, *item2, item5 = tupla
item0, item1, item2, item5
Copied
>_ Output
			
('item0', 1, [True, 3.3, 'item4'], True)
2.3.2.3. Concatenar tuplaslink image 19

Se pueden concatenar tuplas mediante el operador +

	
< > Input
Python
tupla1 = ("a", "b" , "c")
tupla2 = (1, 2, 3)
tupla3 = tupla1 + tupla2
tupla3
Copied
>_ Output
			
('a', 'b', 'c', 1, 2, 3)

Otra forma de concatenar es repetir la tupla X veces mediante el operador *

	
< > Input
Python
tupla1 = ("a", "b" , "c")
tupla2 = tupla1 * 3
tupla2
Copied
>_ Output
			
('a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c')
2.3.2.4. Métodos de las tuplaslink image 20

Las tuplas tienen dos métodos, el primero es el método count() que devuelve el número de veces que aparece un ítem dentro de la tupla

	
< > Input
Python
tupla = (5, 4, 6, 5, 7, 8, 5, 3, 1, 5)
tupla.count(5)
Copied
>_ Output
			
4

Otro método es index() que devuelve la primera posición de un ítem dentro de la tupla

	
< > Input
Python
tupla = (5, 4, 6, 5, 7, 8, 5, 3, 1, 5)
tupla.index(5)
Copied
>_ Output
			
0

2.3.3. Rangelink image 21

Con range() podemos crear una secuencia de números, comenzando desde 0 (de forma predeterminada), se incrementa en 1 (de forma predeterminada) y se detiene antes de un número especificado

range(start, stop, step)

Por ejemplo, si queremos una secuencia de 0 a 5 (sin incluir el 5)

	
< > Input
Python
for i in range(5):
print(f'{i} ', end='')
Copied
>_ Output
			
0 1 2 3 4

Si, por ejemplo, no queremos que empiece en 0

	
< > Input
Python
for i in range(2, 5):
print(f'{i} ', end='')
Copied
>_ Output
			
2 3 4
	
< > Input
Python
for i in range(-2, 5):
print(f'{i} ', end='')
Copied
>_ Output
			
-2 -1 0 1 2 3 4

Por último, si no queremos que se incremente en 1, si por ejemplo queremos una secuencia de números pares.

	
< > Input
Python
for i in range(0, 10, 2):
print(f'{i} ', end='')
Copied
>_ Output
			
0 2 4 6 8

2.4. Diccionarioslink image 22

Los diccionarios se usan para guardar datos en pares key:value. Son modificables, no ordenados y no permiten duplicidades. Se definen mediante los símbolos {}. Admiten ítems de distintos tipos de datos

	
< > Input
Python
diccionario = {
"brand": "Ford",
"model": "Mustang",
"year": 1964,
"colors": ["red", "white", "blue"]
}
diccionario
Copied
>_ Output
			
{'brand': 'Ford',
'model': 'Mustang',
'year': 1964,
'colors': ['red', 'white', 'blue']}

Como se ha dicho, no permiten duplicidades

	
< > Input
Python
diccionario = {
"brand": "Ford",
"model": "Mustang",
"year": 1964,
"year": 2000,
"colors": ["red", "white", "blue"]
}
diccionario["year"]
Copied
>_ Output
			
2000

Se puede obtener su longitud mediante la función len()

	
< > Input
Python
len(diccionario)
Copied
>_ Output
			
4

Como se puede ver, la longitud es 4 y no 5, ya que year lo cuenta solo una vez

2.4.1. Acceder a los ítemslink image 23

Para acceder a un elemento lo podemos hacer a través de su key

	
< > Input
Python
diccionario["model"]
Copied
>_ Output
			
'Mustang'

También se puede acceder mediante el método get

	
< > Input
Python
diccionario.get("model")
Copied
>_ Output
			
'Mustang'

Para saber todas las keys de los diccionarios se puede usar el método keys()

	
< > Input
Python
diccionario.keys()
Copied
>_ Output
			
dict_keys(['brand', 'model', 'year', 'colors'])

Se puede usar una variable para apuntar a las keys del diccionario, con lo que llamándola una vez es necesario

	
< > Input
Python
diccionario = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
# Se declara una vez la variable que apunta a las keys
x = diccionario.keys()
print(x)
# Se añade una nueva key
diccionario["color"] = "white"
# Se consulta la variable que apunta a las key
print(x)
Copied
>_ Output
			
dict_keys(['brand', 'model', 'year'])
dict_keys(['brand', 'model', 'year', 'color'])

Para obtener los valores del diccionario se puede usar el método values()

	
< > Input
Python
diccionario.values()
Copied
>_ Output
			
dict_values(['Ford', 'Mustang', 1964, 'white'])

Se puede usar una variable para apuntar a los valuess del diccionario, con lo que llamándola una vez es necesario

	
< > Input
Python
diccionario = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
# Se declara una vez la variable que apunta a los values
x = diccionario.values()
print(x)
# Se modifica un value
diccionario["year"] = 2020
# Se consulta la variable que apunta a los values
print(x)
Copied
>_ Output
			
dict_values(['Ford', 'Mustang', 1964])
dict_values(['Ford', 'Mustang', 2020])

Si lo que se quiere son los items enteros, es decir keys y values hay que usar el método items()

	
< > Input
Python
diccionario.items()
Copied
>_ Output
			
dict_items([('brand', 'Ford'), ('model', 'Mustang'), ('year', 2020)])

Se puede usar una variable para apuntar a los items del diccionario, con lo que llamándola una vez es necesario

	
< > Input
Python
diccionario = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
# Se declara una vez la variable que apunta a los items
x = diccionario.items()
print(x)
# Se modifica un value
diccionario["year"] = 2020
# Se consulta la variable que apunta a los items
print(x)
Copied
>_ Output
			
dict_items([('brand', 'Ford'), ('model', 'Mustang'), ('year', 1964)])
dict_items([('brand', 'Ford'), ('model', 'Mustang'), ('year', 2020)])

Se puede comprobar si una key existe en el diccionario

	
< > Input
Python
"model" in diccionario
Copied
>_ Output
			
True

2.4.2. Modificar los ítemslink image 24

Se puede modificar un item accediendo a él directamente

	
< > Input
Python
diccionario = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
# Se modifica un item
diccionario["year"] = 2020
diccionario
Copied
>_ Output
			
{'brand': 'Ford', 'model': 'Mustang', 'year': 2020}

O se puede modificar mediante el método update()

	
< > Input
Python
diccionario = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
# Se modifica un item
diccionario.update({"year": 2020})
diccionario
Copied
>_ Output
			
{'brand': 'Ford', 'model': 'Mustang', 'year': 2020}

2.4.3. Añadir ítemslink image 25

Se puede añadir un item agregándolo de esta manera:

	
< > Input
Python
diccionario = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
# Se modifica un item
diccionario["colour"] = "blue"
diccionario
Copied
>_ Output
			
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964, 'colour': 'blue'}

O se puede agregar mediante el método update()

	
< > Input
Python
diccionario = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
# Se modifica un item
diccionario.update({"colour": "blue"})
diccionario
Copied
>_ Output
			
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964, 'colour': 'blue'}

2.4.4. Eliminar ítemslink image 26

Se puede eliminar un item con una key específica mediante el método pop()

	
< > Input
Python
diccionario = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
# Se elimina un item
diccionario.pop("model")
diccionario
Copied
>_ Output
			
{'brand': 'Ford', 'year': 1964}

O se puede eliminar un item con una key específica mediante del indicando el nombre de la key entre los símbolos []

	
< > Input
Python
diccionario = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
# Se elimina un item
del diccionario["model"]
diccionario
Copied
>_ Output
			
{'brand': 'Ford', 'year': 1964}

Se elimina el diccionario entero si se usa del y no se especifica la key de un item

	
< > Input
Python
diccionario = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
# Se elimina un item
del diccionario
if 'diccionario' not in locals():
print("diccionario eliminado")
Copied
>_ Output
			
diccionario eliminado

Si lo que se quiere es eliminar el último item introducido, se puede usar el método popitem()

	
< > Input
Python
diccionario = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
# Se elimina el último item introducido
diccionario.popitem()
diccionario
Copied
>_ Output
			
{'brand': 'Ford', 'model': 'Mustang'}

Si se quiere limpiar el diccionario hay que usar el método clear()

	
< > Input
Python
diccionario = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
diccionario.clear()
diccionario
Copied
>_ Output
			
{}

2.4.5. Copiar diccionarioslink image 27

No se pueden copiar diccionarios mediante diccionario1 = diccionario2, ya que si se modifica diccionario1 también se modifica diccionario2

	
< > Input
Python
diccionario1 = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
diccionario2 = diccionario1
diccionario1["year"] = 2000
diccionario2["year"]
Copied
>_ Output
			
2000

Por lo que hay que usar el método copy()

	
< > Input
Python
diccionario1 = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
diccionario2 = diccionario1.copy()
diccionario1["year"] = 2000
diccionario2["year"]
Copied
>_ Output
			
1964

O hay que usar el constructor de diccionarios `dict()

	
< > Input
Python
diccionario1 = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
diccionario2 = dict(diccionario1)
diccionario1["year"] = 2000
diccionario2["year"]
Copied
>_ Output
			
1964

2.4.6. Diccionarios anidadoslink image 28

Los diccionarios pueden tener itemss de cualquier tipo de dato, incluso otros diccionarios. A este tipo de diccionarios se les denomina diccionarios nested

	
< > Input
Python
diccionario_nested = {
"child1" : {
"name" : "Emil",
"year" : 2004
},
"child2" : {
"name" : "Tobias",
"year" : 2007
},
"child3" : {
"name" : "Linus",
"year" : 2011
}
}
diccionario_nested
Copied
>_ Output
			
{'child1': {'name': 'Emil', 'year': 2004},
'child2': {'name': 'Tobias', 'year': 2007},
'child3': {'name': 'Linus', 'year': 2011}}
	
< > Input
Python
child1 = {
"name" : "Emil",
"year" : 2004
}
child2 = {
"name" : "Tobias",
"year" : 2007
}
child3 = {
"name" : "Linus",
"year" : 2011
}
diccionario_nested = {
"child1" : child1,
"child2" : child2,
"child3" : child3
}
diccionario_nested
Copied
>_ Output
			
{'child1': {'name': 'Emil', 'year': 2004},
'child2': {'name': 'Tobias', 'year': 2007},
'child3': {'name': 'Linus', 'year': 2011}}

2.4.7. Métodos de los diccionarioslink image 29

Estos son los métodos que se pueden usar en los diccionarios

2.4.8. Dictionary comprehensionlink image 30

Igual que podíamos hacer list comprehensions mediante la sintaxis

list_comprehension = [expression for item in iterable if condition == True]

Podemos hacer dictionaries comprehensions mediante la siguiente sintaxis

dictionary_comprehension = {key_expression: value_expression for item in iterable if condition == True}

Veamos un ejemplo

	
< > Input
Python
dictionary_comprehension = {x: x**2 for x in (2, 4, 6) if x &gt; 2}
dictionary_comprehension
Copied
>_ Output
			
{4: 16, 6: 36}

2.5. Setslink image 31

2.5.1. Setlink image 32

Los sets se utilizan en Python para guardar un conjunto de items en una sola variable. Se pueden guardar items de distintos tipos. Son no ordenados y no tienen índice.

Se diferencian de las listas en que no tienen ni orden ni índice.

Se declaran mediante los símbolos {}

Como set es una palabra reservada en Python, creamos un set con el nombre set_

	
< > Input
Python
set_ = {'item0', 1, 5.3, "item4", 5, 6.6}
set_
Copied
>_ Output
			
{1, 5, 5.3, 6.6, 'item0', 'item4'}

No puede haber ítems duplicados, si encuentra algún ítem duplicado se queda solo con uno

	
< > Input
Python
set_ = {'item0', 1, 5.3, "item4", 5, 6.6, 'item0'}
set_
Copied
>_ Output
			
{1, 5, 5.3, 6.6, 'item0', 'item4'}

Se puede obtener la longitud del set mediante la función len()

	
< > Input
Python
len(set_)
Copied
>_ Output
			
6

Como se puede ver la longitud del set es 6 y no 7, ya que se queda con un solo 'item0'

Se puede comprobar si un ítem se encuentra en el set

	
< > Input
Python
'item4' in set_
Copied
>_ Output
			
True
2.5.1.1. Añadir ítemslink image 33

Se puede añadir un elemento al set mediante el método add()

	
< > Input
Python
set_.add(8.8)
set_
Copied
>_ Output
			
{1, 5, 5.3, 6.6, 8.8, 'item0', 'item4'}

Se puede agregar otro set mediante el método update()

	
< > Input
Python
set2 = {"item5", "item6", 7}
set_.update(set2)
set_
Copied
>_ Output
			
{1, 5, 5.3, 6.6, 7, 8.8, 'item0', 'item4', 'item5', 'item6'}

También se pueden añadir ítems de tipos de datos iterables de Python

	
< > Input
Python
lista = ["item9", 10, 11.2]
set_.update(lista)
set_
Copied
>_ Output
			
{1, 10, 11.2, 5, 5.3, 6.6, 7, 8.8, 'item0', 'item4', 'item5', 'item6', 'item9'}
2.5.1.2. Eliminar ítemslink image 34

Se puede eliminar un ítem determinado mediante el método remove()

	
< > Input
Python
set_.remove('item9')
set_
Copied
>_ Output
			
{1, 10, 11.2, 5, 5.3, 6.6, 7, 8.8, 'item0', 'item4', 'item5', 'item6'}

O mediante el método discard()

	
< > Input
Python
set_.discard('item6')
set_
Copied
>_ Output
			
{1, 10, 11.2, 5, 5.3, 6.6, 7, 8.8, 'item0', 'item4', 'item5'}

Mediante el método pop() se puede eliminar el último ítem, pero como los sets no son ordenados no hay manera de saber cuál es el último ítem. El método pop() devuelve el ítem eliminado

	
< > Input
Python
print(f"set antes de pop(): {set_}")
eliminado = set_.pop()
print(f"Se ha eliminado {eliminado}")
Copied
>_ Output
			
set antes de pop(): {1, 5, 5.3, 6.6, 8.8, 7, 10, 11.2, 'item5', 'item0', 'item4'}
Se ha eliminado 1

Mediante el método clear() se puede vaciar el conjunto

	
< > Input
Python
set_.clear()
set_
Copied
>_ Output
			
set()

Por último, con del se puede eliminar el set

	
< > Input
Python
del set_
if 'set_' not in locals():
print("set eliminado")
Copied
>_ Output
			
set eliminado
2.5.1.3. Unir ítemslink image 35

Una forma de unir sets es mediante el método union()

	
< > Input
Python
set1 = {"a", "b" , "c"}
set2 = {1, 2, 3}
set3 = set1.union(set2)
set3
Copied
>_ Output
			
{1, 2, 3, 'a', 'b', 'c'}

Otra forma es mediante el método update(), pero de esta manera se añade un set en otro, no se crea uno nuevo

	
< > Input
Python
set1 = {"a", "b" , "c"}
set2 = {1, 2, 3}
set1.update(set2)
set1
Copied
>_ Output
			
{1, 2, 3, 'a', 'b', 'c'}

Estos métodos de unión eliminan los duplicados, pero si queremos obtener los elementos duplicados en dos sets usamos el método intersection()

	
< > Input
Python
set1 = {"apple", "banana", "cherry"}
set2 = {"google", "microsoft", "apple"}
set3 = set1.intersection(set2)
set3
Copied
>_ Output
			
{'apple'}

Si queremos obtener los elementos duplicados en dos sets, pero sin crear un set nuevo, usamos el método intersection_update()

	
< > Input
Python
set1 = {"apple", "banana", "cherry"}
set2 = {"google", "microsoft", "apple"}
set1.intersection_update(set2)
set1
Copied
>_ Output
			
{'apple'}

Ahora al revés, si queremos quedarnos con los no duplicados usamos el método symmetric_difference().

La diferencia entre esto y la unión entre dos sets es que en la unión se queda con todos los ítems, pero los que están duplicados solo los coge una vez. Ahora nos quedamos con los que no están duplicados

	
< > Input
Python
set1 = {"apple", "banana", "cherry"}
set2 = {"google", "microsoft", "apple"}
set3 = set1.symmetric_difference(set2)
set3
Copied
>_ Output
			
{'banana', 'cherry', 'google', 'microsoft'}

Si queremos quedarnos con los no duplicados sin crear un nuevo set usamos el método symmetric_difference_update()

	
< > Input
Python
set1 = {"apple", "banana", "cherry"}
set2 = {"google", "microsoft", "apple"}
set1.symmetric_difference_update(set2)
set1
Copied
>_ Output
			
{'banana', 'cherry', 'google', 'microsoft'}
2.5.1.4. Métodos de los setslink image 36

Estos son los métodos que se pueden usar en los sets

2.5.2. FrozenSetlink image 37

Los frozensets son como los sets pero con la salvedad de que son inmutables, al igual que las tuplas son como las lists pero inmutables. Por lo que no podremos añadir o eliminar ítems

2.6. Booleanoslink image 38

Hay solo dos booleanos en Python: True y False

Mediante la función bool() se puede evaluar si cualquier cosa es True o False

	
< > Input
Python
print(bool("Hello"))
print(bool(15))
print(bool(0))
Copied
>_ Output
			
True
True
False

2.6.1. Otros tipos de datos True y Falselink image 39

Los siguientes datos son True:

  • Cualquier string que no esté vacío
  • Cualquier número excepto el 0
  • Cualquier lista, tupla, diccionario o set que no esté vacío
	
< > Input
Python
print(bool("Hola"))
print(bool(""))
Copied
>_ Output
			
True
False
	
< > Input
Python
print(bool(3))
print(bool(0))
Copied
>_ Output
			
True
False
	
< > Input
Python
lista = [1, 2, 3]
print(bool(lista))
lista = []
print(bool(lista))
Copied
>_ Output
			
True
False
	
< > Input
Python
tupla = (1, 2, 3)
print(bool(tupla))
tupla = ()
print(bool(tupla))
Copied
>_ Output
			
True
False
	
< > Input
Python
diccionario = {
"brand": "Ford",
"model": "Mustang",
"year": 1964,
"colors": ["red", "white", "blue"]
}
print(bool(diccionario))
diccionario.clear()
print(bool(diccionario))
Copied
>_ Output
			
True
False
	
< > Input
Python
set_ = {'item0', 1, 5.3, "item4", 5, 6.6}
print(bool(set_))
set_.clear()
print(bool(set_))
Copied
>_ Output
			
True
False

2.7. Binarioslink image 40

2.7.1. Byteslink image 41

El tipo bytes es una secuencia inmutable de bytes. Solo admiten caracteres ASCII. También se pueden representar los bytes mediante números enteros cuyos valores deben cumplir 0 <= x < 256

Para crear un tipo byte debemos introducir antes el carácter b

	
< > Input
Python
byte = b"MaximoFN"
byte
Copied
>_ Output
			
b'MaximoFN'

También se pueden crear mediante su constructor bytes()

	
< > Input
Python
byte = bytes(10)
byte
Copied
>_ Output
			
b''
	
< > Input
Python
byte = bytes(range(10))
byte
Copied
>_ Output
			
b' '

Se pueden concatenar bytes mediante el operador +

	
< > Input
Python
byte1 = b'DeepMax'
byte2 = b'FN'
byte3 = byte1 + byte2
byte3
Copied
>_ Output
			
b'DeepMaxFN'

O mediante la repetición con el operador *

	
< > Input
Python
byte1 = b'MaximoFN '
byte2 = byte1 * 3
byte2
Copied
>_ Output
			
b'MaximoFN MaximoFN MaximoFN '

Podemos comprobar si un carácter está dentro de la cadena

	
< > Input
Python
b'D' in byte1
Copied
>_ Output
			
False

Estos son los métodos que se pueden usar en los bytes

2.7.2. Bytearraylink image 42

Los bytearrays son iguales que los bytes, solo que son mutables

	
< > Input
Python
byte_array = bytearray(b'MaximoFN')
byte_array
Copied
>_ Output
			
bytearray(b'MaximoFN')

2.7.3. MemoryViewlink image 43

Los objetos memoryview permiten que el código Python acceda a los datos internos de un objeto que admite el protocolo de buffer sin realizar copias.

La función memoryview() permite el acceso directo de lectura y escritura a los datos orientados a bytes de un objeto sin necesidad de copiarlos primero. Eso puede generar grandes ganancias de rendimiento cuando se opera con objetos grandes, ya que no crea una copia al cortar.

Protocolo de búfer, puede crear otro objeto de acceso para modificar los datos grandes sin copiarlos. Esto hace que el programa utilice menos memoria y aumente la velocidad de ejecución.

	
< > Input
Python
byte_array = bytearray('XYZ', 'utf-8')
print(f'Antes de acceder a la memoria: {byte_array}')
mem_view = memoryview(byte_array)
mem_view[2]= 74
print(f'Después de acceder a la memoria: {byte_array}')
Copied
>_ Output
			
Antes de acceder a la memoria: bytearray(b'XYZ')
Después de acceder a la memoria: bytearray(b'XYJ')

---

➡️ **Continúa en la Parte 2: operadores, control de flujo y funciones**, donde aprenderás a operar con los datos y a estructurar tu código con funciones.

Seguir leyendo

Últimos posts -->

¿Has visto estos proyectos?

Gymnasia

Gymnasia Gymnasia
React Native
Expo
TypeScript
FastAPI
Next.js
OpenAI
Anthropic

Aplicación móvil de entrenamiento personal con asistente de IA, biblioteca de ejercicios, seguimiento de rutinas, dieta y medidas corporales

Horeca chatbot

Horeca chatbot Horeca chatbot
Python
LangChain
PostgreSQL
PGVector
React
Kubernetes
Docker
GitHub Actions

Chatbot conversacional para cocineros de hoteles y restaurantes. Un cocinero, jefe de cocina o camaeror de un hotel o restaurante puede hablar con el chatbot para obtener información de recetas y menús. Pero además implementa agentes, con los cuales puede editar o crear nuevas recetas o menús

Naviground

Naviground Naviground
Ver todos los proyectos -->
>_ Disponible para proyectos

¿Tienes un proyecto con IA?

Hablemos.

maximofn@gmail.com

Especialista en Machine Learning e Inteligencia Artificial. Desarrollo soluciones con IA generativa, agentes inteligentes y modelos personalizados.

¿Quieres ver alguna charla?

Últimas charlas -->

¿Quieres mejorar con estos tips?

Últimos tips -->

Usa esto en local

Los espacios de Hugging Face nos permite ejecutar modelos con demos muy sencillas, pero ¿qué pasa si la demo se rompe? O si el usuario la elimina? Por ello he creado contenedores docker con algunos espacios interesantes, para poder usarlos de manera local, pase lo que pase. De hecho, es posible que si pinchas en alún botón de ver proyecto te lleve a un espacio que no funciona.

Flow edit

Flow edit Flow edit

Edita imágenes con este modelo de Flow. Basándose en SD3 o FLUX puedes editar cualquier imagen y generar nuevas

FLUX.1-RealismLora

FLUX.1-RealismLora FLUX.1-RealismLora
Ver todos los contenedores -->
>_ Disponible para proyectos

¿Tienes un proyecto con IA?

Hablemos.

maximofn@gmail.com

Especialista en Machine Learning e Inteligencia Artificial. Desarrollo soluciones con IA generativa, agentes inteligentes y modelos personalizados.

¿Quieres entrenar tu modelo con estos datasets?

short-jokes-dataset

HuggingFace

Dataset de chistes en inglés

Uso: Fine-tuning de modelos de generación de texto humorístico

231K filas 2 columnas 45 MB
Ver en HuggingFace →

opus100

HuggingFace

Dataset con traducciones de inglés a español

Uso: Entrenamiento de modelos de traducción inglés-español

1M filas 2 columnas 210 MB
Ver en HuggingFace →

netflix_titles

HuggingFace

Dataset con películas y series de Netflix

Uso: Análisis de catálogo de Netflix y sistemas de recomendación

8.8K filas 12 columnas 3.5 MB
Ver en HuggingFace →
Ver más datasets -->