Tipos de datos y estructuras de datos integradas en Python
- 1. Tipos de datos numéricos en Python: int (Enteros), floats (Números decimales), y complex (Números complejos)
- 2. Strings (Cadenas de texto) en Python
- 3. Valores booleanos en Python
- 4. Listas en Python
- 5. Tuplas en Python
- 6. Asignación de tupla (Tuple assignment)
- 7. Diccionarios en Python (Dictionaries in Python)
¡Hola y bienvenidos!. Si estás aprendiendo Python, esta guía es para ti, encontraras una exhaustiva descripción de la sintaxis de Python y montones de código de ejemplos para ayudarte en tu aprendizaje.
Esta guía es una adaptación y traducción de un artículo original de Estefania Cassingena Navone que lo puedes encontrar en FreeCodeCamp.org.
💡Anotación: A lo largo de esta guía, voy a usar
<>
para indicar que esta parte de la sintaxis será remplazada por el elemento descrito por el texto dentro de ella. Un ejemplo de ello seria<variable>
y para temas prácticos voy a usar un diminutivo<var>
esto quiere decir que será remplazado por el nombre de una variable cuando escribamos el código.
Tenemos varios tipos de datos y estructuras de datos con los que podemos usar en nuestros programas. Cada un tiene su aplicación particular. Vamos a verlos en detalle.
Tipos de datos numéricos en Python: int (Enteros), floats (Números decimales), y complex (Números complejos)
Estos son tipos de datos numéricos que puedes usar en Python:
Integers (Enteros)
Los integers
son números sin decimales. Puedes confirmar si un número es un int
con la función type()
. Si la salida es <class 'int'>
, entonces el número es un entero.
Por ejemplo:
1 | type(1) |
Floats (Números decimales)
Puedes detectar los floats
visualmente por la ubicación del punto decimal. Si usas la función type()
para confirmar el tipo de dato verás esto en la salida <class 'float'>
.
Aquí te muestro algunos ejemplos:
1 | type(4.5) |
Complex (Números complejos)
Los números complex
tienen una parte real y otra parte imaginaria denotada con j
. Puedes crear números complex
en Python con la función complex()
. El primer argumento es la parte real y el segundo es la parte imaginaria.
Aquí te muestro algunos ejemplos:
1 | complex(4, 5) |
Strings (Cadenas de texto) en Python
Los strings
son muy útiles en Python. Ellos contienen una secuencia de caracteres y usualmente son usadas para representar texto en el código.
Por ejemplo:
1 | "Hola, Mundo" |
1 | 'Hola, Mundo' |
Podemos usar ambas, comillas simples ''
o comillas dobles ""
para definir un string
. Ambas son válidas y equivalentes, pero deberías elegir una de las dos y usarla consiente mente en todo el programa.
💡Anotación: ¡Si! Usas un
string
cuando tu escribes “Hola, Mundo” en el programa. Cuando tu veas un valor dentro de comillas simples o dobles en python, este sera unstring
.
Los string
pueden contener cualquier carácter que podamos escribir con nuestro teclado, incluyendo número, símbolos, y cualquier otro símbolo especial.
Por ejemplo:
1 | '45678' |
1 | 'my_email@email.com' |
1 | '#IlovePython' |
💡Anotación: Los espacios en blanco cuentan como caracteres en un
string
.
Comillas dentro de strings (Cadenas de texto)
Si definimos un string
con comillas dobles ""
, entonces podemos usar comillas simples dentro de un string
.
Por ejemplo:
1 | "I'm 20 years old" |
Si definimos un string
con comillas simples ''
, entonces podemos usar comillas dobles dentro del string
.
Por ejemplo:
1 | 'Mi libro favorito es "Ready Player One"' |
Indexación de cadenas de texto (String Indexing)
Podemos usar índices para acceder a un carácter de un string
en Python. Un índice es un número que representa una posición específica en un string
. Podemos asociar el carácter con la posición.
Este es un diagrama de un string
Hola
:
1 | String: H o l a |
💡Anotación: Inicia desde el
0
y va incrementando en1
por cada carácter a la derecha.
Por ejemplo:
1 | "Hello" my_string = |
Podemos también usar números negativos de índices para acceder a caracteres:
1 | "Hello" my_string = |
💡Anotación: Comúnmente usaremos
-1
para acceder al último carácter de un string
Rebanamiento de caracteres (String slicing)
Posiblemente necesitemos obtener un carácter o una parte de los caracteres de un string.
Esta es la sintaxis general:
1 | <string_variable>[inicio:final:paso] |
inicio
es el índice del primer carácter que incluiremos en el slice. Por defecto es0
.final
es el índice del último carácter que vamos a incluir en el slice (este carácter no será incluido). Por defecto, es el último carácter del string (si omitimos este valor, el último carácter será incluido).paso
es cuanto vamos a sumar al índice actual para llegar al próximo.
Podemos especificar 2 parámetros para usar el valor por defecto del paso
es de 1. Este incluirá todos los caracteres dentro inicio
y final
(no incluido):
1 | <string_variable>[inicio:final] |
Por ejemplo:
1 | "freeCodeCamp" freecodecamp = |
💡Anotación: Nótese que si el valor del parámetro va más allá de un rango válido de índices el slice continuara estando presente. Esta es la forma en que el creador de Python implemento esta característica de string slicing.
Si agregamos un valor a paso
, vamos a “saltar” del índice uno al siguiente según el valor que demos.
Por ejemplo:
1 | "freeCodeCamp" freecodecamp = |
Nosotros podemos también usar un paso negativo para ir de derecha a izquierda:
1 | "freeCodeCamp" freecodecamp = |
Y podemos omitir un parámetro para usar el valor por defecto. Solo tenemos que incluir el correspondiente signo :
si omitimos el inicio
, final
, o ambos:
1 | "freeCodeCamp" freecodecamp = |
💡Anotación: El último ejemplo es una de las formas más comunes para invertir un string.
f-Strings
En Python 3.6 y en versiones más recientes, podemos usar un tipo de string llamado f-string que nos ayuda a darle formato a nuestros strings de manera más sencilla.
Para definir un f-string, solo necesitamos añadir una f
antes de las comillas simples o comillas dobles. Luego con el string, vamos a meter las variables o expresiones en llaves {}
. Esto se remplazará con el valor en la variable o ejecución cuando ejecutemos el programa.
Por ejemplo:
1 | primer_nombre = "Jaime" |
Salida:
1 | Hola, mi nombre es Jaime. y estoy aprendiendo Python. |
Aquí tenemos un ejemplo donde calculamos el valor de una expresión y remplazamos el valor en el string:
1 | valor = 5 |
Salida:
1 | 5 multiplicado por 2 es: 10 |
También podemos usar métodos dentro de las llaves y el valor retornado remplazará el original en el string cuando ejecutemos el programa:
1 | freecodecamp = "FREECODECAMP" |
Salida:
1 | freecodecamp |
Métodos de los strings
Los strings tienen métodos con los cuales realizar funciones comunes implementadas por los desarrolladores de Python, nosotros podemos hacer uso de ellas directamente en nuestros programas. Son un útiles para hacer operaciones comunes.
Estos tienen una sintaxis general para usarlos métodos:
1 | <nombre_de_variable_string>.<nombre_del_metodo>(<argumentos>) |
Por ejemplo:
1 | "freeCodeCamp" freecodecamp = |
Si quieres aprender más sobre los métodos en Python, te recomiendo que leas este artículo de la documentación de Python.
💡Anotación: Todos los métodos retornan una copia del string. Los métodos no modifican directamente el string porque los strings son inmutables en Python.
Valores booleanos en Python
Los valores booleanos son True y False en Python. Deben iniciar con una letra mayúscula para ser reconocidos como un valor booleano.
Por ejemplo:
1 | type(True) |
Si los escribimos en minúsculas, nos va a dar un error:
1 | type(true) |
Listas en Python
Ahora que cubrimos los tipos básicos de datos en Python, continuemos con las estructuras de datos incluidas en Python. Comenzando con las listas.
Para definir una lista, usamos corchetes [] con elementos separados por coma ,
.
💡Anotación: Es recomendable añadir un espacio después de cada coma para hacer el código más legible.
Por ejemplo:
1 | [1, 2, 3, 4, 5] |
1 | ["a", "b", "c", "d"] |
1 | [3.4, 2.4, 2.6, 3.5] |
Las listas contienen valores de diferentes tipos de datos, esta es una lista válida en Python:
1 | [1, "Emily", 3.4] |
También podemos asignar una lista a una variable:
1 | mi_lista = [1, 2, 3, 4, 5] |
1 | letras = ["a", "b", "c", "d"] |
Listas anidadas
Las listas pueden contener valores de cualquier tipo de dato, incluso otras listas. Estas listas son llamadas nested list
(listas anidadas).
1 | [[1, 2, 3], [4, 5, 6]] |
En este ejemplo, [1, 2, 3]
y [4, 5, 6]
son listas anidadas.
Otros ejemplos de listas anidadas válidas:
1 | [["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"]] |
1 | [1, [2, 3, 4], [5, 6, 7], 3.4] |
También podemos acceder a la lista anidada usando su correspondiente índice.
1 | 1, 2, 3], [4, 5, 6]] mi_lista = [[ |
Las listas anidadas pueden ser usadas para representar, por ejemplo, una estructura de un tablero de juegos 2D donde cada número puede representar un elemento diferente.
1 | # Tablero de ejemplo donde: |
Longitud de la lista (List length)
Podemos usar la función len()
para obtener la longitud de una lista (el número de elementos que esta contiene).
Por ejemplo:
1 | 1, 2, 3, 4] mi_lista = [ |
Actualizar un valor de una lista
Podemos actualizar un valor en particular con el índice usando esta sintaxis:
1 | <nombre_de_variable_lista>[<indice>] = <valor> |
Por ejemplo:
1 | "a", "b", "c", "d"] letras = [ |
Añadiendo valores a una lista
Podemos añadir un nuevo valor al final de una lista con el método .append()
.
Por ejemplo:
1 | 1, 2, 3, 4] mi_lista = [ |
Remover valores de una lista
Podemos remover un valor de una lista con el metodo remove()
.
Por ejemplo:
1 | 1, 2, 3, 4] mi_lista = [ |
💡Anotación: Esto solo va a remover el primer valor que sea igual al valor indicado. Por ejemplo, si tratamos de remover el número 3 de una lista que tiene dos números 3, el segundo no va a ser removido:
1 | 1, 2, 3, 3, 4] mi_lista = [ |
Indexación de listas
Podemos usar un índice en una lista como un índice de un string, con índices que inician desde 0.
1 | "a", "b", "c", "d"] letras = [ |
Rebanamiento de listas (List slicing)
También podemos Rebanamiento una lista usando la misma sintaxis que usamos con los strings y podemos omitir los parámetros usando los que están por defecto. Ahora, en lugar de añadir caracteres al segmento, añadiremos los elementos de una lista.
1 | <variable_de_lista>[inicio, fin, paso] |
Por ejemplo:
1 | "a", "b", "c", "d", "e", "f", "g", "h", "i"] mi_lista = [ |
Métodos de las listas
Python también tiene métodos ya implementados para ayudarnos con las operaciones más comunes con las listas. Te mostraré algunos ejemplos usando los métodos más comunes.
1 | 1, 2, 3, 3, 4] mi_lista = [ |
Tuplas en Python
Para definir una tupla en Python, vamos a usar paréntesis ()
y se separan los elementos con una coma ,
. Es recomendado añadir un espacio después de cada coma para hacer el código más legible.
1 | (1, 2, 3, 4, 5) |
1 | ("a", "b", "c", "d") |
1 | (3.4, 2.4, 2.6, 3.5) |
Podemos asignar una tupla a una variable:
1 | mi_tupla = (1, 2, 3, 4, 5) |
Indexación de tuplas
Podemos acceder a cada elemento de una tupla con su correspondiente índice:
1 | 1, 2, 3, 4) mi_tupla = ( |
También podemos usar índices negativos:
1 | 1, 2, 3, 4) mi_tupla = ( |
Longitud de una tupla (Tuple length)
Para saber la longitud de una tupla, usamos la función len()
, pasando la tupla como argumento:
1 | 1, 2, 3, 4) mi_tupla = ( |
Tuplas anidadas
Las tuplas pueden contener valores de cualquier tipo, incluso listas y otras tuplas. Estas tuplas se llaman tuplas anidadas (nested tuples).
1 | ([1, 2, 3], (4, 5, 6)) |
En el ejemplo anterior, tenemos una tupla anidada (4, 5, 6) y una lista, puedes acceder a estas estructuras de datos anidadas con su correspondiente índice.
Por ejemplo:
1 | 1, 2, 3], (4, 5, 6)) mi_tupla = ([ |
Rebanamiento de tuplas (Tuple slicing)
También podemos rebanar una tupla como las listas y strings. El mismo principio y reglas que antes.
Esta es la sintaxis general:
1 | <nombre_de_variable_tupla>[inicio, fin, paso] |
Por ejemplo:
1 | 4, 5, 6, 7, 8, 9, 10) mi_tupla = ( |
Métodos de las tuplas (Tuple methods)
Estos son dos métodos que están por defecto en Python para trabajar con tuplas:
1 | 4, 4, 5, 6, 6, 7, 8, 9, 10) mi_tupla = ( |
💡Anotación: Las tuplas son inmutables. Ellas no pueden ser modificadas, así que no podemos añadir, actualizar, o remover elementos de una tupla. Si necesitamos hacerlo, tendemos que crear una copia de una tupla.
Asignación de tupla (Tuple assignment)
En Python, Tenemos una característica muy útil llamada Asignación de tupla. Con este tipo de asignación, podemos asignar valores a múltiples variables en la misma línea.
Los valores son asignados a la correspondiente variable en orden que aparecen. Por ejemplo, en la asignación a, b = 1, 2
el valor 1
es asiganado a la variable a
y el valor 2
es asignado a la variable b
.
Por ejemplo:
1 | # Asignación de tupla |
💡Anotación: La asignación de tupla es comúnmente usada para cambiar valores de dos variables:
1 | 1 a = |
Diccionarios en Python (Dictionaries in Python)
Ahora vamos a iniciar con los diccionarios. Esta estructura incorporada nos permite crear pares de valores donde un valor es asociado con otro.
Para definir un diccionario en Python, usaremos los corchetes {}
con su respectivo par clave-valor separados por una coma.
La llave es separada del valor con :
.
1 | {"a": 1, "b": 2, "c"; 3} |
Tu puedes asignar el diccionario a una variable:
1 | mi_dicc = {"a": 1, "b": 2, "c"; 3} |
Las claves de un diccionario deben ser de un tipo de dato inmutable. Por ejemplo, pueden ser strings, números, o tuplas, pero no listas, ya que son mutables.
- Strings: {“Ciudad 1”: 456, “Ciudad 2”: 577, “Ciudad 3”: 678}
- Numeros: {1: “Move Left”, 2: “Move Right”, 3: “Move Up”, 4: “Move Down”}
- Tuplas: {(0, 0): “Inicio”, (2, 4): “Meta”}
Los valores de un diccionario pueden ser cualquier tipo de dato, as que podemos asignar strings, números, listas, tuplas, sets, e incluso otros diccionarios como valores. Aquí te dejo algunos ejemplos:
1 | {"producto_id": 4556, "ingredientes": ["tomate", "queso", "hongos"], "precio": 10.67} |
1 | {"id": 567, "nombre": "Emily", "grados": {"Matemáticas": 80, "Biología": 74, "Ingles": 97}} |
Longitud de un Diccionario (Dictionary length)
Para obtener el número de pares claves-valor, usamos la función len():
1 | "a": 1, "b": 2, "c": 3, "d": 4} mi_dicc = { |
Obtener el valor en un diccionario
Para obtener el valor en un diccionario, usamos la clave con esta sintaxis:
1 | <nombre_de_variable_diccionario>[<clave>] |
Esta expresión será remplazada con el valor correspondiente a esa clave.
Por ejemplo:
1 | mi_dicc = {"a": 1, "b": 2, "c": 3, "d": 4} |
La salida es el valor asociado a "a"
:
1 | 1 |
Actualizando un valor en un diccionario
Para actualizar un valor asociado con una clave existente, usaremos la misma sintaxis, pero ahora añadiremos un operador de asignación y el valor:
1 | <nombre_de_variable_diccionario>[<clave>] = <valor> |
Por ejemplo:
1 | "a": 1, "b": 2, "c": 3, "d": 4} mi_dicc = { |
Ahora el diccionario es:
1 | {'a': 1, 'b': 6, 'c': 3, 'd': 4} |
Añadir un par clave-valor a un diccionario
Las claves de un diccionario tienen que ser únicas. Para añadir un nuevo par clave-valor usamos la misma sintaxis que usamos para actualizar el valor, pero ahora la clave tiene que ser nueva.
1 | <nombre_de_variable_diccionario>[<nueva_clave>] = <valor> |
Por ejemplo:
1 | "a": 1, "b": 2, "c": 3, "d": 4} mi_dicc = { |
Ahora el diccionario tiene un nuevo par clave-valor:
1 | {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} |
Eliminar un par clave-valor en un diccionario
Para eliminar un par clave-valor, usamos la declaración del
.
Por ejemplo:
1 | "a": 1, "b": 2, "c": 3, "d": 4} mi_dicc = { |
Ahora el diccionario es:
1 | {'a': 1, 'b': 2, 'd': 4} |
Métodos de los diccionarios
Estos son algunos de los métodos más comúnmente usados de los diccionarios:
1 | "a": 1, "b": 2, "c": 3, "d": 4} mi_dicc = { |
Para aprender más sobre los métodos de los diccionarios, les recomiendo leer este artículo de la documentación de Python.
Este es un artículo al cual regresar constante mente mientras interiorizas estos nuevos conceptos, añádelo a tus marcadores, te invito a que abras tu editor de código favorito y practiques, no te olvides de comentar y compartir, nos vemos en otro artículo.