Artículos de Tecnología > Data Science

¿Append o Extend? Agregar elementos a la lista con Python

Alex Felipe

En el desarrollo de cualquier sistema es muy común tratar con listas, como una lista de productos, por ejemplo. Supongamos que tenemos la siguiente representación de un producto:

clase Producto (objeto): def __init __ (self, nombre, valor):
  self .__ nombre = nombre
  auto .__ valor = valor

  def __repr __ (self):
    return "nombre:% s valor:% s"% (self .__ nombre, self .__ valor)

  def get_nombre (self):
    return self .__ nombre

  def get_valor (self):
    return self .__ valor

Entonces tenemos una lista con algunos productos:

from model import Producto

Chocolate = Producto("Chocolate", 4.35) 
Jugo = Producto("Jugo", 3.75) 
Frijoles = Producto("Frijoles", 10.5) 
Producto = [Chocolate, Jugo, Frijoles]

print Productos

Si ejecutamos este código, tenemos el siguiente resultado:

[nombre:Chocolate valor:4.35, nombre:Jugo valor:3.75, nombre:Frijoles valor:10.5]

Por ahora, todo va como se esperaba. ¿Pero qué pasa si queremos agregar un nuevo producto a esta lista? ¿Cómo podemos hacer eso? En las listas de Python, hay dos funciones capaces de agregar elementos, que son append y extend. ¡Entonces probemoslos! Comenzaremos con el append:

producto4 = Producto("Queso", 4.25) 
productos.append(producto4)

print productos

Mira cuál es el resultado:

[nombre:Chocolate valor:4.35, nombre:Jugo valor:3.75, nombre:Feijao valor:10.5, nombre:Queso valor:4.25]

Aparentemente todo salió como se esperaba. Entonces, probemos la función extend:

producto4 = Producto("Queso", 4.25) 
productos.extend(producto4)

print productos

Probamos el código nuevamente:

TypeError: 'Producto' object is not iterable

¡Uy! Parece que extender no puede agregar un objeto a la lista ... ¿En serio? Si analizamos el mensaje de error, nos informa que el objeto de tipo "Producto" no es iterable, pero ¿qué significa eso?

extend, a diferencia de append, itera sobre el elemento que desea agregar, es decir, involucra el argumento pasado por parámetro dentro de un ciclo, y luego agrega los valores contenidos dentro de ese parámetro, en este caso, intentó hacer esto con el objeto del tipo Producto. Esta es precisamente la razón por la cual no fue posible agregar el objeto de tipo Producto y presentó este error.

Entonces, ¿eso significa que no podemos usar extend para agregar objetos?

¡No exactamente!

Una solución a este problema es, en lugar de enviar un objeto puro, enviar como parámetro una estructura iterable que contenga un objeto de tipo "Producto", es decir, ¡envíe una lista que contenga un Producto!

producto4 = Producto("Queso", 4.25) productos.extend([producto4])

print productos

¿Funciona ahora? Veamos el resultado:

[nombre:Chocolate valor:4.35, nombre:Jugo valor:3.75, nombre:Frijoles valor:10.5, nombre:Queso valor:4.25]

Funcionó como se esperaba! Sin embargo, ¡solo hemos agregado un solo elemento! ¿Qué pasa si quisiéramos agregar varios elementos? En otras palabras, agregar una lista de nuevos productos. ¿Funcionaría sin problemas? Probemos primero con el append:

producto_nuevo1 = Producto("Jugo", 4.5) 

producto_nuevo2 = Producto("Pan", 3.0)

productos_nuevos = [producto_nuevo1, produecto_nuevo2]

productos.append(productos_nuevos)

print productos

Al probar el código obtenemos el siguiente resultado:

[nombre:Chocolate valor:4.35, nombre:Jugo valor:3.75, nombre:Frijoles valor:10.5, [nombre:Jugo valor:4.5, nombre:Pan valor:3.0]]

Aparentemente funcionó, pero observe que en lugar de agregar cada producto a la lista de productos, ¡agregó una lista completa! Es decir, cuando usamos append simplemente agrega el valor completo a la lista. Pero, ¿y si usamos extend? ¿Funciona? Es decir, ¿agrega producto por producto? Vamos a revisar:

producto_nuevo1 = Producto("Jugo", 4.5) producto_nuevo2 = Producto("Pan", 3.0)

productos_nuevos = [producto_nuevo1, Producto_nuevo2]

productos.extend(productos_nuevos)

print productos

Ejecutando el código nuevamente

[nombre:Chocolate valor:4.35, nombre:Jugo valor:3.75, nombre:Frijoles valor:10.5, nombre:Jugo valor:4.5, nombre:Pan valor:3.0]

Funcionó como se esperaba! Por lo tanto, concluimos que las dos funciones funcionan de la siguiente manera:

Podemos ver claramente la diferencia entre las dos funciones cuando intentamos agregar una string, por ejemplo, la string "chocolate":

palabras = []

palabras.append("chocolate")

print palabras

Resultado del append:

['chocolate']
palabras = []

palabras.extend("chocolate")

print palabras

Resultado del append:

['c', 'h', 'o', 'c', 'o', 'l', 'a', 't', 'e']

Tenga en cuenta que, mientras append agrega toda la cadena, extend agregó letra por letra, porque la string, detrás de escena, es una array de char, por lo que escanea esta array, es decir, esta estructura iterable, y agrega cada artículo.

¿Qué tal aprender más sobre Python y sus diversos recursos? Entonces, ¡Mira nuestros cursos de Python para Data Science aquí en Alura!

Artículos de Tecnología > Data Science

En Alura encontrarás variados cursos sobre Data Science. ¡Comienza ahora!

Precios en:
USD
  • USD
  • BOB
  • CLP
  • COP
  • USD
  • PEN
  • MXN
  • UYU

Semestral

  • 273 cursos

    Cursos de Programación, Front End, Data Science, Innovación y Gestión.

  • Videos y actividades 100% en Español
  • Certificado de participación
  • Estudia las 24 horas, los 7 días de la semana
  • Foro y comunidad exclusiva para resolver tus dudas
  • Luri, la inteligencia artificial de Alura

    Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana

  • Acceso a todo el contenido de la plataforma por 6 meses
US$ 65.90
un solo pago de US$ 65.90
¡QUIERO EMPEZAR A ESTUDIAR!

Paga en moneda local en los siguientes países

Anual

  • 273 cursos

    Cursos de Programación, Front End, Data Science, Innovación y Gestión.

  • Videos y actividades 100% en Español
  • Certificado de participación
  • Estudia las 24 horas, los 7 días de la semana
  • Foro y comunidad exclusiva para resolver tus dudas
  • Luri, la inteligencia artificial de Alura

    Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana

  • Acceso a todo el contenido de la plataforma por 12 meses
US$ 99.90
un solo pago de US$ 99.90
¡QUIERO EMPEZAR A ESTUDIAR!

Paga en moneda local en los siguientes países

Acceso a todos
los cursos

Estudia las 24 horas,
dónde y cuándo quieras

Nuevos cursos
cada semana