Python – Capítulo 18: Creación de sublistas

Objetivo: aprender los conceptos básicos de slicing aplicados a las listas en Python.

Las listas dan mucho de sí; no en vano son uno de los artilugios estrella en la programación en Python. Hoy voy a mostrarte cómo crear sublistas, es decir, listas que son un trozo (en inglés, slice) de otra mayor. Por ejemplo, dada la lista de días de la semana, una sublista sería aquella que contiene los días laborables.

Arrancamos IDLE o el intérprete de comandos de Python e introducimos una lista sencilla sobre la que cacharrearemos:

vocales = ['a','e','i','o','u']
>>>vocales
['a', 'e', 'i', 'o', 'u']

Para extraer una sublista de una lista empleamos la notación:

lista[i:j]

donde i y j son dos índices que separamos por dos puntos (:)

El primer índice, i, corresponde al índice del elemento inicial a partir del cual, incluido, comenzará la sublista. El otro indica el extremo superior, pero esta vez sin incluir.

Todo se entenderá más claro si vocalizamos mejor:

>>> vocales[2:4]
['i', 'o']

Como ves, se nos ha creado una lista (fíjate en los corchetes) que contiene todos los elementos que van desde el que tiene índice 2 (incluido) al de índice 4 (sin incluir), es decir, los de índices 2 y 3. Vuelvo a recordar que el primer elemento tiene por índice cero, por eso el de índice dos corresponde a la ‘i’.

La lista original no se ve afectada por esta operación:

>>> vocales
['a', 'e', 'i', 'o', 'u']

¿Qué provocaría esto?

>>> vocales[2:3]
['i']

En efecto, pues sólo se extraerían los que comienzan por índice 2 y terminan en índice 2 también.

¿Y esto otro?

>>> vocales[2:2]
[]

Observa que obtenemos una lista vacía, sin ningún elemento. Es lógico; el inicio tendría por índice 2 y el final índice 1. No tiene ningún sentido que el extremo derecho sea menor que el izquierdo.

¿Cómo haríamos para extraer una lista que fuera idéntica a la original?

Pensemos… El primer índice es cero, el último es 4. Pero esto no vale:

>>> vocales[0:4]
['a', 'e', 'i', 'o']

porque sólo incluiría los de índices 0, 1, 2 y 3.

Solución: poner como extremo superior 5 o cualquier valor por encima. Probémoslo:

>>> vocales[0:5]
['a', 'e', 'i', 'o', 'u']

>>> vocales[0:100]
['a', 'e', 'i', 'o', 'u']

Esto merece una explicación:

En condiciones normales, cuando referenciamos a una lista a través de un índice fuera de sus límites, como en estos dos últimos ejemplos, obtendríamos un error. Esto no es así para el caso de las sublistas. Debemos pensar en el valor derecho, más que como un índice real, como una cota superior. Todo lo que encuentre entre medias lo extraerá, sin importar que la lista concluya antes.

Para facilitar el trasiego con sublistas Python permite utilizar valores por defecto.

1) Si omitimos el primer valor del slice , Python sobreentiende que el comienzo es desde el principio de la lista:

>>> vocales[:3]
['a', 'e', 'i']

Como ves, el mismo efecto que haber hecho esto otro:

>>> vocales[0:3]
['a', 'e', 'i']

2) Si omitimos el segundo valor del slice Python sobreentiende que se trata del último de la lista:

>>> vocales[3:]
['o', 'u']

La omisión de ambos nos permite, obviamente, recuperar la lista completa, de principio a fin:

>>> vocales[:]
['a', 'e', 'i', 'o', 'u']

Puede parecer algo inútil, pero ya veremos más adelante que este uso puede permitirnos ciertas sutilidades elegantes.

Para finalizar, volvamos a la lista que mencionamos al comienzo:

>>> semana = ['lunes', 'martes', 'miércoles', 'jueves', 
'viernes', 'sábado', 'domingo']

¿Qué comando emplearías para extraer los días laborables y, además, asignar ese resultado a la lista laborables?

Si has comprendido la lección de hoy, seguro que no tendrás dificultad en dar con esto:

>>> laborables = semana[:5]
>>> laborables
['lunes', 'martes', 'miércoles', 'jueves', 'viernes']

Volveremos más adelante con el slicing refinándolo aún más y aprendiendo algunas técnicas comunes. Entre tanto, asegúrate de practicar estos conceptos simples.

Javier Montero Gabarró


Fecha de la última modificación: 21 de junio de 2013.


http://elclubdelautodidacta.es/wp/2011/09/python-capitulo-18-creacion-de-sublistas/


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

Deja un comentario

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies