ProgramaciónDesarrollador Python

¿Cuál es la diferencia entre el método append() y extend() en listas de Python? Proporcione ejemplos donde una comprensión incorrecta lleva a errores lógicos.

Supere entrevistas con el asistente de IA Hintsage

Respuesta.

Los métodos append() y extend() en listas de Python se utilizan para agregar elementos, pero lo hacen de manera fundamentalmente diferente:

  • append(obj) añade un solo elemento (cualquier objeto, incluido una lista) al final de la lista original.
  • extend(iterable) añade todos los elementos del objeto iterable uno por uno (como si los "desplegara" al añadir).

Ejemplo:

lst = [1, 2, 3] lst.append([4, 5]) # Resultado: [1, 2, 3, [4, 5]] lst = [1, 2, 3] lst.extend([4, 5]) # Resultado: [1, 2, 3, 4, 5]

Esta diferencia a menudo se convierte en la causa de errores lógicos, cuando se espera una lista "plana", pero se obtiene una lista anidada.

Pregunta capciosa.

¿Qué pasará si realizas list1 = [1, 2]; list2 = [3, 4]; list1.append(list2)? ¿Cómo se ve list1? ¿Cuál es la diferencia de list1.extend(list2)?

Respuesta:

  • Después de list1.append(list2) el resultado es: [1, 2, [3, 4]] — la segunda lista se agregó como un solo elemento (lista anidada).
  • Después de list1.extend(list2) el resultado es: [1, 2, 3, 4] — los elementos de la segunda lista se "desplegaron" y se añadieron como elementos separados.

Ejemplos de errores reales debido a la falta de conocimiento sobre los matices del tema.


Historia

Un desarrollador, al combinar los resultados del análisis de varios archivos, hacía output.append(parsed_lines). Como resultado, en lugar de una larga lista plana, obtenía una lista de listas (un elemento por cada archivo), lo que rompía todo el procesamiento posterior — en particular, las funciones que esperaban una secuencia de cadenas comenzaron a arrojar errores con los datos de entrada.


Historia

En un proyecto se utilizó extend para agregar una cadena como "foo" (es decir, la cadena se consideraba iterable). Esto llevó a que los caracteres de la cadena se convirtieran en elementos separados de la lista: ['f', 'o', 'o'] en lugar de "foo" como se deseaba.


Historia

Al serializar datos para enviarlos en JSON, se aplicaron append/extend al bucle sin entender la diferencia. Como resultado, se obtenían estructuras que violaban el esquema, lo que provocaba que algunos microservicios fallaran en la etapa de validación o funcionaran incorrectamente.