Conceptos Avanzados de Tipos de Datos, Eliminación Segura en Bucles y Codificación en Python

1. Obtener la longitud en bits con bit_length:

valor = 10
print(valor.bit_length())
Resultado: 4

2. Capitalizar la primera letra con capitalize:

cadena = "ejemplo"
resultado = cadena.capitalize()  # Las cadenas son inmutables; cualquier modificación crea un nuevo espacio.
print(resultado)
Resultado: Ejemplo

3. Capitalizar cada palabra con title:

texto = "hola mundo"
texto_transformado = texto.title()
print(texto_transformado)
Resultado: Hola Mundo

4. Buscar índice con index (lanza error si no encuentra):

secuencia = "python genial"
indice = secuencia.index("g")
print(indice)
Resultado: 7

5. Buscar índice con find (retorna -1 si no encuentra):

cadena_prueba = "programacion"
posicion = cadena_prueba.find("z")
print(posicion)
Resultado: -1

6. Unir elementos con join:

coleccion = "abcdef"
separador = "-"
unido = separador.join(coleccion)
print(unido)
Resultado: a-b-c-d-e-f

7. Centrar texto con center y rellenar:

frase = "central"
frase_centrada = frase.center(15, "*")
print(frase_centrada)
Resultado: ****central****

8. Formatear por posición con format:

plantilla = "hola {} mundo"
formateado = plantilla.format("desde Python")
print(formateado)
Resultado: hola desde Python mundo

9. Formatear por índice con format:

estructura = "datos: {0}, {1}, {2}"
salida = estructura.format("primero", "segundo", "tercero")
print(salida)
Resultado: datos: primero, segundo, tercero

10. Formatear por clave con format:

modelo = "nombre: {nom}, edad: {ed}"
texto_final = modelo.format(ed=30, nom="Carlos")
print(texto_final)
Resultado: nombre: Carlos, edad: 30

11. Intercambiar mayúsculas y minúsculas con swapcase:

ejemplo_texto = "PyThOn"
invertido = ejemplo_texto.swapcase()
print(invertido)
Resultado: pYtHoN

12. Invertir una lista:

lista_original = [10, 20, 30, 40]
# Método con slicing (nueva lista)
invertida1 = lista_original[::-1]
# Método in-place
lista_original.reverse()
print(invertida1)
print(lista_original)
Resultado: [40, 30, 20, 10]
[40, 30, 20, 10]

13. Ordenar una lista (ascendente por defecto):

numeros = [5, 2, 8, 1, 9]
numeros.sort(reverse=True)  # Descendente
print(numeros)
Resultado: [9, 8, 5, 2, 1]

14. Consultar direcciones de memoria con id:

lista_a = [1, 2, [3]]
lista_b = lista_a * 2  # Elementos compartidos en multiplicación
print(id(lista_a[0]), id(lista_b[2]))
Resultado: Direcciones iguales para elementos inmutables

15. Trampa en listas/tuplas al multiplicar:

ejemplo_lista = [1, 2, []]
ejemplo_multi = ejemplo_lista * 3
ejemplo_multi[-1].append(5)
print(ejemplo_multi)
Resultado: [1, 2, [5], 1, 2, [5], 1, 2, [5]]

16. Inicializar listas (forma corta vs. explícita):

lista1 = []  # Forma corta
lista2 = list()  # Forma explícita
print(lista1)
print(lista2)
Resultado: []
[]

17. Definir tuplas correctamente:

tupla1 = (10)  # Esto es un entero, no una tupla
tupla2 = (10,)  # Tupla con un solo elemento
tupla3 = ()  # Tupla vacía
print(type(tupla1))
print(type(tupla2))
print(type(tupla3))
Resultado: <class 'int'>
<class 'tuple'>
<class 'tuple'>

18. Crear claves en diccionario con fromkeys:

diccionario = {}
diccionario = diccionario.fromkeys(["x", "y", "z"], 100)
print(diccionario)
Resultado: {'x': 100, 'y': 100, 'z': 100}

19. Convertir lista de tuplas a diccionario:

pares = [(10, "a"), (20, "b"), (30, "c")]
diccionario_nuevo = dict(pares)
print(diccionario_nuevo)
Resultado: {10: 'a', 20: 'b', 30: 'c'}

20. Resumen de tipos de datos:

  • Enteros (int): Ordenados (no soportan índice), inmutables, no iterables.
  • Booleanos (bool): Inmutibles, no iterables.
  • Cadenas (str): Ordenadas (soportan índice), inmutables, iterables.
  • Listas (list): Ordenadas (soportan índice), mutables, iterables.
  • Tuplas (tuple): Ordenadas (soportan índice), inmutibles, iterables.
  • Diccionarios (dict): Desordenados (no soportan índice), mutables, iterables.
  • Conjuntos (set): Desordenados (no soportan índice), mutables, iterables.

21. Trampas al eliminar en bucles:

Método directo (puede fallar):

elementos = [10, 20, 30, 40, 50]
for item in elementos:
    elementos.clear()
print(elementos)
Resultado: []

Usando remove con bucle for (error común):

datos = [10, 20, 30, 40, 50]
for valor in datos:
    if valor % 20 == 0:
        datos.remove(valor)
print(datos)
Resultado: [10, 30, 50]  # Algunos elementos pueden omitirse

Eliminar con range (seguro):

lista_eliminar = [10, 20, 30, 40, 50]
for i in range(len(lista_eliminar)):
    lista_eliminar.pop(0)
print(lista_eliminar)
Resultado: []

Eliminar con copia (seguro):

original = [10, 20, 30, 40, 50]
copia = original.copy()
for item in copia:
    original.remove(item)
print(original)
Resultado: []

Eilminar de diccionarios:

dic_datos = {"clave1": 100, "clave2": 200}
copia_dic = dic_datos.copy()
for llave in copia_dic:
    del dic_datos[llave]
print(dic_datos)
Resultado: {}

Eliminar de conjuntos:

conjunto = {1, 2, 3, 4, 5}
conjunto_copia = conjunto.copy()
for elem in conjunto_copia:
    conjunto.remove(elem)
print(conjunto)
Resultado: set()

Eliminar por índice par (ejemplo avanzado):

lista_avanzada = [11, 22, 33, 44, 55, 66]
# Método con copia
lista_temp = lista_avanzada.copy()
for idx, val in enumerate(lista_temp):
    if idx % 2 == 1:
        lista_avanzada.remove(val)
print(lista_avanzada)
Resultado: [11, 33, 55]

22. Conceptos de codificación:

Sistemas comunes:

  • ASCII: Inglés, números, símbolos (1 byte por carácter).
  • GBK: Chino simplificado (2 bytes por carácter chino).
  • Unicode: Universal (4 bytes por carácter en representación interna).
  • UTF-8: Eficiente (1-4 bytes según el carácter).

Python 3 usa Unicode internamente. La codificación en disco puede ser UTF-8 o GBK.

Codificación y decodificación:

texto_original = "hola"
texto_codificado = texto_original.encode("utf-8")
print(texto_codificado)
texto_decodificado = texto_codificado.decode("utf-8")
print(texto_decodificado)
Resultado: b'hola'
hola

Ejercicios de práctica:

1. Analizar código y predecir resultados.

lista_mutable = [1, 2, 3]
lista_ref = [lista_mutable, lista_mutable]
lista_mutable.append(4)
print(lista_ref)
Resultado: [[1, 2, 3, 4], [1, 2, 3, 4]]

2. Comprender copia superficial vs. profunda.

import copy
original = [1, [2, 3]]
copia_superficial = copy.copy(original)
copia_profunda = copy.deepcopy(original)
print(original[1] is copia_superficial[1])
print(original[1] is copia_profunda[1])
Resultado: True
False

3. Eliminar elementos de una lista basándose en condiciones.

datos_usuario = ["Ana", "Pedro", "Andrés", "Carlos"]
for nombre in list(datos_usuario):  # Usar list() para iterar sobre copia
    if nombre.startswith("A"):
        datos_usuario.remove(nombre)
print(datos_usuario)
Resultado: ['Pedro', 'Carlos']

Etiquetas: Python tipos-de-datos manipulación-de-cadenas operaciones-de-lista diccionarios

Publicado el 6-5 03:47