Python Quiz 5 – Actualización de listas completas usando slicing en Python

Actualización de listas completas usando slicing en Python

Pregunta principal del pyquiz:

>>> lst = ['h', 42, 3.14]
>>> lst[:5] = ['pepe']
>>> print(lst)
- ?? -
# A - RuntimeError
# B - ['pepe']
# C - ['h', 42, 3.14, 'pepe']

Concepto y explicación

La idea principal de esta pregunta es analizar correctamente cómo se pueden actualizar las listas en Python utilizando slicing (rebanadas).

La lógica general de este pyquiz es:

  • Se inicializa una lista con elementos de diferentes tipos.
  • Se selecciona una sublista (en este caso [:5]).
  • Se cambian los valores de la sublista por otra lista.

Veamos en profundidad qué ocurre en esta ejecución:

>>> lst = ['h', 42, 3.14]
>>> lst
['h', 42, 3.14]
>>> lst[:5]
['h', 42, 3.14]

Como se puede ver, el slicing utilizado crea una sublista que representa la lista completa.

En Python si el límite superior del slicing es mayor que la longitud de la lista no se eleva ningún error, sino que se devuelven los valores hasta el final de la lista.

Casos similares podrían ser los siguientes:

>>> lst[:3]
['h', 42, 3.14]
>>> lst[:4532873]
['h', 42, 3.14]
>>> lst[:]
['h', 42, 3.14]
>>> lst[::]
['h', 42, 3.14]

Por lo tanto, se puede asumir que los valores a actualizar representan la lista completa.

Los valores a añadir a ese subrango (que representa la lista), son ['pepe'], por lo que como resultado se actualiza el subrango con esos valores, lo que en este caso significa cambiar la lista completa:

>>> lst[:5] = ['pepe']
>>> lst
['pepe']

Este ejemplo está claro, ¿pero qué implicaciones tiene este tipo de actualizaciones y qué diferencia presenta con la creación de la lista ['pepe']?

Si analizamos los identificadores de cada parte se obtiene la respuesta:

>>> lst = ['h', 42, 3.14]
>>> pp = ['pepe']
>>> id(lst)
4567978176
>>> id(pp)
4567967360
>>> lst[:5] = pp
>>> lst
['pepe']
>>> id(lst)
4567978176
>>> id(pp)
4567967360

Como se puede ver, los identificadores tanto de lst como los de pp son diferentes, incluso cuando se hace la asignación, por lo que la gran diferencia es que se hace un reemplazo «inplace» (en la propia lista original), sin crear una nueva lista.

Solución

Por tanto la solución correcta es la B, dado que se reemplaza la lista completa con nuevos valores.

B) [‘pepe’]


Practica Python con PyQuizzes

En la sección de PyQuizzes puedes encontrar ejercicios prácticos explicados pormenorizado para mejorar tus habilidades como pythonista. ¡No te los pierdas!


Tutorial Python online

Aprender Python de forma gratuita siguiendo las secciones del tutorial de Python.


Libros recomendados para aprender Python

Estos son los libros que pueden ayudarte a aprender Python, aprender a programar, tipos de datos, algoritmia y mucho más.

Libro Python a fondo Disponible en:

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos Ver más

  • Responsable: Oscar Ramirez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento: No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a ionos (1&1) que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Publicar un comentario

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para fines de afiliación y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Ver Política de cookies
Privacidad