Tipo de datos fundamentales en Python

Secuencias e indices

Las secuencias son estructuras de datos ordenadas que permiten acceder a sus elementos mediante un índice. Este índice puede ser positivo (de izquierda a derecha) o negativo (de derecha a izquierda).

Ejemplo:

texto = "abcd"
# Indices positivos: 0, 1, 2, 3
# Indices negativos: -4, -3, -2, -1

Operación de slicing

La sintaxis básica es [inicio:fin:paso]. El valor en la posición fin no se incluye en el reslutado. Un paso negativo invierte la dirección del recorrido.

cadena = "abcde"
print(cadena[::1])      # abcde
print(cadena[1:4:])      # bcd
print(cadena[0:4])       # abcd
print(cadena[::-1])      # edcba (inversión completa)
print(cadena[-1:-9:-1])  # edcba

Funciones auxiliares

  • len(secuencia): obtiene la longitud.
  • max(secuencia): devuelve el valor máximo.
  • min(secuencia): devuelve el valor mínimo.
  • secuencia.index(elemento): retorna la primera posición donde aparece el elemento; si no existe, genera un error.
print("*" * 30)

Listas

Creación y características

Son secuencias mutables; al modificar su contenido, la dirección de memoria no cambia. Aceptan métodos como index y count.

# Creación directa
lista_a = ["a", "asd", 12]

# Mediante el constructor list()
lista_b = list(secuencia)

datos = ["123", 123, "abv"]
print(datos.count("abv"))  # 1
print(datos.index(123))    # 1

Operaciones principales

Eliminación con del

lista1 = [12, 123, 777]
del lista1
# print(lista1)  # Esto lanzará un error porque la lista ya no existe

Recorrido

Con for directo:

elementos = ["abc", "def", "qwe", "123", 555]
for item in elementos:
    print(item)

Con range e índice:

for i in range(len(elementos)):
    print(elementos[i])

Inserción al final: append vs extend

datos = ["abc", "def", "qwe", "123", 555]

# append agrega el argumento como un único elemento
datos.append(["asd", 123])
datos.append("mmm")
print(datos)  # ['abc', 'def', 'qwe', '123', 555, ['asd', 123], 'mmm']

# extend descompone el argumento iterable y agrega sus elementos uno a uno
datos2 = ["abc", "def", "qwe", "123", 555]
datos2.extend("kjh")
print(datos2)  # ['abc', 'def', 'qwe', '123', 555, 'k', 'j', 'h']

datos2.extend(["aaa", "bbb"])
print(datos2)  # ['abc', 'def', 'qwe', '123', 555, 'k', 'j', 'h', 'aaa', 'bbb']

datos2.extend({"k": "123"})  # En un diccionario, se agregan las claves
print(datos2)  # ... 'k'

Inserción en posición específica: insert

valores = ["abc", "def", "qwe", "123", 555]
valores.insert(1, "123")
print(valores)  # ['abc', '123', 'def', 'qwe', '123', 555]

Elimianción por valor: remove

colores = ["rojo", "verde", "azul"]
colores.remove("verde")
print(colores)  # ['rojo', 'azul']

Eliminación por índice: pop

colores = ["rojo", "verde", "azul"]
eliminado = colores.pop(1)
print(eliminado)  # verde
print(colores)    # ['rojo', 'azul']

Vaciar lista: clear

lista_borrar = [1, 2, 3]
lista_borrar.clear()
print(lista_borrar)  # []

Invertir orden: reverse

numeros = [1, 2, 3, 4]
numeros.reverse()
print(numeros)  # [4, 3, 2, 1]

Copiar lista: copy

origen = ["abc", "def", "qwe", "123", 555]
copia = origen.copy()
print(copia)  # ['abc', 'def', 'qwe', '123', 555]

Modificación de elementos

datos = ["abc", "def", "qwe", "123", 555]
datos[1] = "kkk"
print(datos)  # ['abc', 'kkk', 'qwe', '123', 555]

Ordenamiento

Método sort (in-place)

lista_mix = ["asd", "nnn", "KKK", "QWQW"]
lista_mix.sort()
print(lista_mix)  # ['KKK', 'QWQW', 'asd', 'nnn']

lista_mix.sort(reverse=True)
print(lista_mix)  # ['nnn', 'asd', 'QWQW', 'KKK']

lista_mix.sort(key=str.lower)
print(lista_mix)  # ['asd', 'KKK', 'nnn', 'QWQW']

Función sorted (nueva lista)

lista_original = ["asd", "nnn", "KKK", "QWQW"]
nueva = sorted(lista_original, reverse=True)
print(nueva)   # ['nnn', 'asd', 'QWQW', 'KKK']

Listas multidimensionales

matriz = [["asd", 123], ["mm", 43], ["ll", 55]]
for fila in matriz:
    for elemento in fila:
        print(elemento, end=" ")
    print()
# asd 123
# mm 43
# ll 55

Tuplas

Creación

Son inmutables: no permiten agregar, eliminar ni modificar elementos. Pueden contener diversos tipos de datos ordenados, por lo que soportan índices.

tupla = ("hello", [10, 20, 30], 123)

# Tupla de un solo elemento: obligatorio el uso de coma
un_solo = (10,)
print(type(un_solo))  # <class>

no_tupla = (10)
print(type(no_tupla))  # <class>
</class></class>

Operadores de pertenencia

valores = (123, "aaa", "bbb")
if "123" not in valores:
    print("No existe")

Acceso y slicing

valores = (123, "aaa", "bbb")
print(valores[0:2])  # (123, 'aaa')

Recorrido

colores_t = ("abc", "bbb", "kkk", "ppp")
for color in colores_t:
    print(color)

for i in range(len(colores_t)):
    print(colores_t[i])

Diccionarios

Creación

Colección mutable de pares clave-valor. Las claves deben ser inmutables y únicas; los valores pueden repetirse.

persona = {"nombre": "qqq", "edad": 123}
otro = dict(clave1="v1", clave2="v2")

Acceso a valores

info = {"nombre": 11, "edad": 155, "mm": 999}
print(info.get("mm"))      # 999
print(info["nombre"])      # 11

Recorrido

for clave in info:
    print(clave)  # nombre, edad, mm

for clave in info.keys():
    print(clave)

for valor in info.values():
    print(valor)

for item in info.items():
    print(item, type(item))  # ('nombre', 11) <class>

for k, v in info.items():
    print(k, v)  # nombre 11, edad 155, mm 999
</class>

Adición y modificación

info["nueva"] = "ppp"
print(info)  # {'nombre': 11, 'edad': 155, 'mm': 999, 'nueva': 'ppp'}

info.update(mm="1231")
print(info)  # {'nombre': 11, 'edad': 155, 'mm': '1231', 'nueva': 'ppp'}

Eliminación

# pop: elimina por clave y retorna el valor
eliminado = info.pop("mm")
print(eliminado)  # 999

# popitem: elimina y retorna un par (clave, valor) aleatorio
par = info.popitem()
print(par)        # ('mm', 999) (ejemplo)

# del
del info["mm"]

# clear: vacía el diccionario
info.clear()
print(info)  # {}

Conjuntos (set)

Creación

Colección mutable, no ordenada y sin elementos duplicados. Solo pueden almacenar tipos inmutables (cadena, entero, flotante, tupla).

# {} crea un diccionario vacío, no un conjunto
conjunto_vacio = set()

datos = {12, 0, "a"}

Operaciones algebraicas

a = {1, 2, 3}
b = {3, 4, 5}

# Intersección (&)
print(a & b)  # {3}

# Unión (|)
print(a | b)  # {1, 2, 3, 4, 5}

# Diferencia (-)
print(a - b)  # {1, 2}

Métodos principales

s = {10, 20, "asd"}
s.add("kkk")
print(s)  # {'kkk', 10, 20, 'asd'}

s.remove(10)

s.clear()

Recorrido

for elemento in s:
    print(elemento)
# No se puede usar range porque no tiene índice.

String

Cadena inmutable de caracteres ordenados, accesibles mediante índice.

Cambio de mayúsculas/minúsculas

mensaje = "helloworld"
print(mensaje.upper())  # HELLOWORLD
print(mensaje.lower())  # helloworld

División

email = "123@qq.com"
partes = email.split("@")
print(partes)  # ['123', 'qq.com']

Búsqueda

texto = "123@qq.com"
print(texto.count("1"))  # 1
print(texto.find("1"))   # 0
print(texto.find("x"))   # -1

Verificación de inicio/fin

nombre = "qqqwwww"
print(nombre.endswith("www"))  # True
print(nombre.startswith("q"))  # True

Reemplazo

saludo = "HelloWorld"
nuevo = saludo.replace("o", "Hola", 1)
print(nuevo)  # HellHolaWorld

Centrado

titulo = "HelloWorld"
print(titulo.center(20))       #     HelloWorld     
print(titulo.center(20, "*"))  # *****HelloWorld*****

Eliminación de espacios/caracteres

texto_con_espacios = "   HelloWorld   "
print(texto_con_espacios.strip())   # HelloWorld
print(texto_con_espacios.lstrip())  # HelloWorld   
print(texto_con_espacios.rstrip())  #    HelloWorld

cadena = "lpkkkkllp"
print(cadena.strip("lp"))   # kkkk
print(cadena.lstrip("lp"))  # kkkkllp
print(cadena.rstrip("lp"))  # lpkkkk

Formateo de cadenas

Operador %

nombre = "qq"
edad = 18
puntaje = 19.88
print("Nombre: %s, Edad: %d, Puntaje: %.1f" % (nombre, edad, puntaje))

f-strings

print(f"Nombre: {nombre}, Edad: {edad}, Puntaje: {puntaje}")

Método format

print("Nombre: {0}, Edad: {1}, Puntaje: {2}".format(nombre, edad, puntaje))

Validación de contenido

print("123".isdigit())       # True
print("一二三".isdigit())    # False
print("一二三".isnumeric())  # True

print("asd".isalpha())      # True
print("asd12".isalpha())    # False
print("asd12".isalnum())    # True

print("Hello World".istitle())   # True
print("hello World".istitle())   # False
print("Hello world".istitle())   # False
print("HelloWorld".istitle())    # False
print("Hello 2World".istitle())  # True

Concatenación

a = "abc"
b = "ddd"
print(a + b)  # abcddd

union = "".join([a, b])
print(union)  # abcddd

Eliminar duplicados en cadena

original = "hhhoooddd"
limpia = ""
for letra in original:
    if letra not in limpia:
        limpia += letra
print(limpia)  # hod

Ejercicios prácticos

1. Problema del año 2000

anios_cortos = [88, 89, 90, 0, 99]
anios_completos = []
for anio in anios_cortos:
    if anio != 0:
        completo = "19" + str(anio)
    else:
        completo = "200" + str(anio)
    anios_completos.append(completo)
print(anios_completos)  # ['1988', '1989', '1990', '2000', '1999']

2. Simulación de carrito de compras

catalogo = []
carrito = []

# Ingreso de productos
for i in range(5):
    producto = input("Ingrese el nombre del producto (código nombre): ")
    catalogo.append(producto)

# Mostrar catálogo
for item in catalogo:
    print(item)

# Compra
while True:
    codigo = input("Ingrese el código del producto a comprar (q para salir): ")
    if codigo == "q":
        break
    encontrado = False
    for item in catalogo:
        if codigo in item:
            carrito.append(item)
            print("Producto agregado al carrito")
            encontrado = True
            break
    if not encontrado:
        print("Producto no encontrado")

carrito.sort(reverse=True)
print("Productos comprados:")
for item in carrito:
    print(item)

3. Simulación de reserva de boletos de tren

trenes = {
    "G3333": ["Beijing Sur-Tianjin Sur", "16:06", "18:39", "00:33"],
    "G5555": ["Beijing Sur-Tianjin Este", "16:06", "18:39", "00:33"],
    "G6666": ["Beijing Sur-Tianjin Oeste", "16:06", "18:39", "00:33"],
    "G7777": ["Beijing Sur-Tianjin Norte", "16:06", "18:39", "00:33"]
}

print("Código\tOrigen-Destino\tSalida\tLlegada\tDuración")
for codigo, datos in trenes.items():
    print(codigo, end=" ")
    for dato in datos:
        print(dato, end=" ")
    print()

seleccion = input("Ingrese el código del tren: ")
info = trenes.get(seleccion, "No existe")
if info != "No existe":
    pasajero = input("Nombre del pasajero (varios separados por coma): ")
    print(f"Ha comprado {seleccion} - {info[0]} a las {info[1]}. Pasajero: {pasajero}")
else:
    print("Código de tren no válido")

4. Agenda telefónica

contactos = set()
for i in range(5):
    entrada = input(f"Ingrese nombre y teléfono del contacto {i+1}: ")
    contactos.add(entrada)

for registro in contactos:
    print(registro)

Etiquetas: Python tipos de datos listas tuplas diccionarios

Publicado el 7-11 03:07