Blog en español

Slicing de listas en Python: guía para entrevistas

10 de mayo de 202616 min de lectura
Slicing de listas en Python: guía para entrevistas

Domina el slicing de listas en Python con reglas, casos límite y copias superficiales. Prepárate para entrevistas y responde sin dudar.

Ya conoce la sintaxis de slicing. Ha escrito `my_list[1:4]` cien veces y ha obtenido la respuesta correcta. El problema es que conocer la sintaxis y poder explicar las reglas que la sustentan bajo la presión de una entrevista en vivo son dos habilidades completamente distintas. Las preguntas de entrevista sobre slicing de listas en Python no son difíciles porque la mecánica sea oscura; son difíciles porque las repreguntas ponen a prueba los bordes: por qué stop es exclusivo, qué ocurre cuando se sale de los límites y si ese slice que acaba de crear es realmente una copia. Esta guía empareja cada regla con la pregunta exacta, el detalle trampa que esconde y la respuesta breve que suena a que usted ya la había pensado antes.

La buena noticia es que la superficie total aquí es pequeña. Hay aproximadamente seis categorías de preguntas, y se repiten en casi todas las entrevistas técnicas que tocan Python. Domine esas seis categorías y no estará memorizando trivialidades: estará construyendo un modelo mental que se mantiene firme cuando el entrevistador empieza a improvisar.

Diga en voz alta la sintaxis del slice antes de intentar explicarla

¿Qué significa realmente start:stop:step?

La sintaxis es `sequence[start:stop:step]`. Start es el índice donde comienza el slice — inclusivo. Stop es donde termina — exclusivo. Step es el salto, es decir, cuántas posiciones avanza entre cada elemento seleccionado.

La respuesta breve que suele funcionar bien en una entrevista: "Start se incluye, stop se excluye y step controla cómo recorro el rango." Eso es todo. No se extienda más hasta que el entrevistador se lo pida.

Según la documentación oficial de Python sobre secuencias, el slicing se define de forma consistente en todos los tipos de secuencia integrados, así que el mismo modelo mental se aplica a cadenas y tuplas, no solo a listas.

¿Por qué stop es exclusivo y no inclusivo?

La respuesta honesta es por convención, y es una convención que existe por buenas razones. Cuando stop es exclusivo, la longitud del slice es simplemente `stop - start`. No tiene que sumar uno ni ajustar nada para evitar errores de desplazamiento de una posición. Además, significa que dos slices adyacentes, `a[:n]` y `a[n:]`, dividen la lista limpiamente, sin solapamientos ni huecos.

Los entrevistadores preguntan esto como una comprobación de criterio. Quieren ver si de verdad ha interiorizado la regla o si solo la ha memorizado. El mejor argumento para la versión inclusiva es que parece más natural: "dame los elementos del 1 al 3" suena a 1, 2 y 3. Pero la matemática se complica en cuanto empieza a componer slices, y los diseñadores de Python eligieron la versión que se mantiene consistente. Saber por qué existe esa convención es lo que separa una respuesta sólida de una respuesta recitada.

Cómo se ve esto en la práctica

Tome `a = [0, 1, 2, 3, 4, 5]`. El slice `a[1:4]` devuelve `[1, 2, 3]`. Stop es 4, pero el índice 4 — el valor `4` — no se incluye. El error más común en una entrevista cronometrada es escribir `a[1:3]` esperando `[1, 2, 3]` y luego desconcertarse al obtener `[1, 2]`.

En una entrevista simulada, una candidata explicó stop como "el último índice que quiere, menos uno", lo cual es técnicamente correcto, pero suena al revés y confundió al entrevistador. La formulación más clara: stop es el primer índice que no quiere.

Use valores omitidos sin parecer que está adivinando

¿Qué ocurre cuando start, stop o step falta?

El slicing de listas en Python completa cualquier valor omitido con valores predeterminados razonables. Si omite start, se usa el comienzo de la lista. Si omite stop, se usa el final. Si omite step, se usa 1. La parte que más suelen olvidar los candidatos es que omitir step no es lo mismo que escribir `step=1` explícitamente en todos los contextos, especialmente cuando intervienen pasos negativos, donde los valores predeterminados de start y stop se invierten.

La referencia del lenguaje Python sobre slicing especifica estos valores predeterminados con precisión: el límite inferior ausente pasa a ser 0 para pasos positivos y el final de la secuencia para pasos negativos.

La respuesta breve para [:] , [a:] y [:b]

  • `a[:]` — copia toda la lista, del primero al último, con step 1.
  • `a[n:]` — todo desde el índice n hasta el final.
  • `a[:n]` — todo hasta el índice n, sin incluirlo.

Mantenga la explicación tan simple en una entrevista. Explicar demasiado los valores predeterminados transmite incertidumbre, no profundidad. Si el entrevistador quiere más, se lo pedirá.

Cómo se ve esto en la práctica

`a[:]` sobre `[0, 1, 2, 3, 4, 5]` devuelve `[0, 1, 2, 3, 4, 5]`: una nueva lista con el mismo contenido. Es una copia superficial, algo importante para la siguiente pregunta (más sobre esto en la sección 4). `a[3:]` devuelve `[3, 4, 5]`. La omisión cambia el rango, no la regla. La regla siempre es: start es inclusivo, stop es exclusivo y step es el salto.

Maneje los índices negativos y los slices en reversa sin dar vueltas

Por qué los índices negativos parecen obvios hasta que dejan de serlo

La notación de slicing de Python permite índices negativos, y el modelo mental es sencillo: `-1` es el último elemento, `-2` es el penúltimo, y así sucesivamente. La razón estructural por la que la gente se equivoca bajo presión es que está siguiendo dos cosas a la vez — la forma actual de la lista y el desplazamiento negativo — y, cuando la lista es hipotética o está cambiando, la aritmética falla.

La forma clara de pensarlo: un índice negativo `i` en una lista de longitud `n` equivale a `n + i`. Así, en una lista de seis elementos, `-2` es el índice 4. Si se ancla a esa traducción, la aritmética se mantiene estable.

Por qué un step negativo invierte toda la respuesta

Un step negativo invierte la dirección de recorrido. `a[::-1]` recorre la lista desde el final hasta el principio, un paso a la vez. La trampa es que, cuando step es negativo, el valor predeterminado de start pasa a ser el final de la lista y el de stop pasa a ser antes del inicio — por eso `a[::-1]` invierte correctamente toda la lista sin necesidad de límites explícitos.

El error típico en entrevistas: escribir `a[0:-1:-1]` esperando una inversión y obtener una lista vacía. La razón es que, con step `-1`, está pidiendo a Python que avance hacia atrás desde el índice 0 hasta el índice `-1` (que es el último elemento), pero esa dirección nunca alcanza stop, así que no devuelve nada. El índice stop sigue siendo exclusivo, y la dirección importa para definir qué significa "exclusivo".

Una pregunta real de entrevista que prueba esto bien: "Invierta los últimos tres elementos de una lista sin usar `reverse()`." La respuesta es `a[-3:][::-1]`: primero tome la cola de la lista y después inviértala. Ese enfoque en dos pasos es más claro y menos propenso a errores que intentar escribir un solo slice con start, stop y step negativos a la vez.

Cómo se ve esto en la práctica

En `a = [0, 1, 2, 3, 4, 5]`:

  • `a[-3:]` devuelve `[3, 4, 5]` — los últimos tres elementos.
  • `a[::-1]` devuelve `[5, 4, 3, 2, 1, 0]` — inversión completa.
  • `a[-1:-4:-1]` devuelve `[5, 4, 3]` — los últimos tres en orden inverso, usando límites negativos explícitos.

Compare esos dos enfoques para invertir la cola y la dirección de los límites se vuelve concreta en lugar de abstracta.

Responda antes la trampa de copia frente a vista

¿El slicing devuelve una copia o una vista?

En las listas normales de Python, el slicing siempre devuelve una lista nueva: una copia superficial. No devuelve una vista. Esta es una de las trampas del slicing en Python que sorprende a candidatos que han usado NumPy, donde el slicing devuelve una vista y las mutaciones se reflejan en el array original. La diferencia importa porque un entrevistador que pregunta "¿es una copia o una vista?" está comprobando si usted entiende la identidad de objetos, no solo la sintaxis.

La respuesta breve: "El slicing de una lista devuelve un objeto lista nuevo. Modificar el slice no afecta a la original, salvo que la lista contenga objetos mutables." Esa última cláusula es donde realmente vive la siguiente pregunta.

Por qué las listas anidadas complican la respuesta

La respuesta simple "es una copia" es correcta en el nivel superior y errónea en el nivel anidado. Cuando hace slicing de una lista de listas, obtiene una nueva lista externa, pero las listas internas no se copian. Son los mismos objetos, referenciados desde dos lugares. Si cambia una lista interna a través del slice, también la cambia en la original.

Ese es el comportamiento de copia superficial documentado en la biblioteca estándar de Python. Una copia profunda — `copy.deepcopy()` — duplicaría también los objetos anidados. A los entrevistadores les encanta esta repregunta porque revela si el candidato razona sobre memoria o solo reconoce patrones de sintaxis.

Cómo se ve esto en la práctica

La lista externa es un objeto nuevo — `sliced is not original` es `True`. Pero `sliced[0] is original[0]` también es `True`. La mutación a través del slice afectó a la lista interna compartida. En una revisión de código, este es el tipo de error que tarda veinte minutos en encontrarse y cinco segundos en explicarse una vez que se entiende qué significa copia superficial.

Trate los desbordes y los slices vacíos como una característica, no como un error

¿Qué pasa cuando el slice se pasa de los extremos?

A diferencia de la indexación directa — donde `a[10]` en una lista de seis elementos lanza un `IndexError` — el slicing nunca produce un error por salirse de los límites. Python ajusta los límites silenciosamente. Si escribe `a[0:100]` en una lista de seis elementos, obtiene los seis elementos. Si escribe `a[-100:]`, obtiene toda la lista desde el principio.

Esto es intencional y se documenta precisamente en el contexto de las preguntas de entrevista sobre slicing en Python porque los candidatos suelen asumir que debería fallar. No falla. El lenguaje trata los límites fuera de rango como "hasta donde se pueda llegar en esa dirección".

Por qué aparecen slices vacíos en las entrevistas

La trampa es que un slice que parece incorrecto puede devolver una lista vacía en lugar de un error, y esa lista vacía es la respuesta correcta. Los candidatos que esperan una excepción a veces dudan de sí mismos y se exceden al explicarlo, lo que transmite incertidumbre.

La regla clara: si start ya está en stop o más allá de stop, en la dirección de viaje, el resultado es `[]`. Sin excepción, sin aviso.

Cómo se ve esto en la práctica

En `a = [0, 1, 2, 3, 4, 5]`:

  • `a[2:100]` devuelve `[2, 3, 4, 5]` — ajustado al final.
  • `a[4:2]` devuelve `[]` — start está más allá de stop con step positivo, así que no hay nada que recoger.
  • `a[4:2:-1]` devuelve `[4, 3]` — mismos límites, step negativo, y ahora sí hay un rango válido para recorrer hacia atrás.

La diferencia entre los dos últimos es la dirección. Los mismos números, signo opuesto en el step, resultados completamente distintos. Ese es el tipo de detalle que separa una respuesta memorizada de una respuesta sólida.

Sepa cuándo el slicing muta la lista y cuándo solo crea una nueva

¿Cómo funciona realmente la asignación de slices?

La asignación de slices — `a[1:3] = [10, 20]` — modifica la lista original in situ. Reemplaza los elementos de las posiciones especificadas por los nuevos valores. En slices contiguos, el reemplazo puede tener una longitud distinta a la del slice que se está sustituyendo, y Python ajusta el tamaño de la lista en consecuencia.

La variante con slice extendido es donde los entrevistadores se ponen creativos. Un slice extendido usa un step distinto de 1 — por ejemplo, `a[::2] = [10, 20, 30]`. En los slices extendidos, la secuencia de reemplazo debe tener exactamente la misma longitud que el número de posiciones seleccionadas por el slice. Si no se cumple, Python lanza un `ValueError`. Esta es una regla que casi nadie recuerda hasta que la encuentra en producción o en una entrevista técnica.

Según la documentación del modelo de datos de Python, la restricción de igualdad de longitudes en los slices extendidos es explícita e innegociable.

¿En qué se diferencia la eliminación de slices del slicing normal?

`del a[1:3]` elimina esos elementos de la lista original. No es lo mismo que `a[1:3] = []`, aunque el resultado final sea idéntico para slices contiguos. La distinción conceptual importa: eliminar es una sentencia que borra elementos; asignar los reemplaza. En los slices extendidos, `del a[::2]` elimina un elemento sí y otro no sin ninguna restricción de longitud; la eliminación no requiere un reemplazo que coincida.

En una sesión de depuración, que falle una asignación con slice extendido con un `ValueError` es uno de esos errores que parecen totalmente misteriosos hasta que conoce la regla de igualdad de longitudes. Una vez la conoce, el mensaje de error tiene sentido inmediato.

Cómo se ve esto en la práctica

La diferencia de mutación es la clave: el slicing normal lee de una lista y devuelve una nueva; la asignación y la eliminación de slices escriben sobre la original.

Cierre con las preguntas que los entrevistadores repiten una y otra vez

¿Qué preguntas de slicing aparecen con más frecuencia?

Según patrones observados en entrevistas técnicas y simulaciones, los temas que más se repiten se agrupan en seis áreas: la sintaxis básica `start:stop:step`, por qué stop es exclusivo, cuáles son los valores predeterminados de los límites omitidos, cómo interactúan los índices negativos y los steps negativos, si el slicing devuelve una copia o una vista (y qué significa eso para listas anidadas), y la asignación a slices con su regla de igualdad de longitudes en slices extendidos.

No son aleatorias. Se corresponden directamente con los errores más comunes que escriben los desarrolladores de Python en código de producción: fallos de desplazamiento de una posición, mutaciones accidentales por copias superficiales y resultados vacíos inesperados al invertir slices.

Por qué estas preguntas en realidad evalúan criterio

La entrevista no es un cuestionario de trivialidades. Una pregunta como "¿qué devuelve `a[4:2:-1]`?" está evaluando si puede razonar sobre límites y dirección simultáneamente bajo presión de tiempo. La investigación de SHRM sobre entrevistas técnicas estructuradas muestra de forma constante que las mejores preguntas técnicas son las que revelan cómo piensa un candidato, no solo lo que ha memorizado. Los casos límite del slicing son ideales para esto porque la sintaxis superficial es lo bastante simple como para que cualquier candidato preparado la conozca, pero las repreguntas requieren razonamiento real.

Cómo se ve esto en la práctica

Aquí tiene un ejercicio compacto de entrevista simulada. Para cada consigna, la forma de la respuesta breve importa más que las palabras exactas:

  • "¿Qué devuelve `a[1:4]` sobre `[0,1,2,3,4,5]`?" → `[1, 2, 3]`. Start inclusivo, stop exclusivo.
  • "¿Por qué stop es exclusivo?" → Para que `stop - start` sea igual a la longitud del slice y los slices adyacentes se dividan limpiamente.
  • "¿Qué devuelve `a[:]`?" → Una copia superficial de toda la lista.
  • "¿Qué hace `a[::-1]`?" → Invierte la lista recorriéndola hacia atrás con los valores predeterminados de start y stop.
  • "¿El slicing muta la original?" → No; el slicing devuelve una lista nueva. La asignación a slices sí muta la original.
  • "¿Qué pasa con `a[0:100]`?" → Devuelve toda la lista. Los límites se ajustan silenciosamente; no hay error.
  • "¿Cuál es la trampa con las listas anidadas y el slicing?" → Copia superficial: los objetos internos se comparten, así que mutar a través del slice también muta el contenido anidado de la original.

Recorra esa lista una vez antes de su entrevista. No para memorizar las palabras, sino para asegurarse de que el razonamiento detrás de cada respuesta sea lo bastante sólido como para resistir una repregunta.

Cómo Verve AI puede ayudarle a dominar su entrevista de código con Python list slicing

La verdadera dificultad de las preguntas de slicing en Python no es aprender las reglas, sino explicarlas en voz alta, en orden, mientras un entrevistador observa y repregunta en tiempo real. Esa es una habilidad de ejecución, y solo mejora con práctica en vivo frente a repreguntas impredecibles. Verve AI Coding Copilot está diseñado específicamente para esa brecha: lee su pantalla mientras trabaja en un problema en LeetCode, HackerRank o CodeSignal, y muestra sugerencias contextuales basadas en lo que realmente está haciendo, no una pista prefabricada que asume que está atascado en el mismo punto que cualquier otro candidato. Si está resolviendo un problema de slicing y el entrevistador pregunta por qué su slice devolvió una lista vacía, Verve AI Coding Copilot puede mostrarle en ese momento la explicación sobre la discrepancia de dirección, no después de que ya haya dudado al responder. El modo Secondary Copilot le permite mantenerse centrado en un solo problema durante períodos largos sin perder el contexto, algo importante cuando una entrevista técnica lleva una pregunta de slicing a una discusión más amplia sobre estructuras de datos. Tanto en rondas técnicas en vivo como en retos de programación asíncronos, Verve AI Coding Copilot sugiere respuestas en tiempo real y permanece invisible mientras lo hace, de modo que el razonamiento que usted expone suena propio, porque se construye sobre lo que ya está pensando.

---

Esa sensación de presión de la primera vez que se quedó en blanco ante "¿por qué stop es exclusivo?" no desaparece leyendo más documentación. Desaparece cuando puede explicar sintaxis, valores predeterminados, dirección, semántica de copia y mutación sin divagar, en ese orden, bajo presión de tiempo y con una repregunta en camino. Ese es todo el examen. Repase una vez más las siete preguntas simuladas de la sección final antes de su entrevista. No para añadir más material, sino para asegurarse de que el razonamiento detrás de cada respuesta sea lo bastante rápido como para resistir la repregunta. Si lo es, está listo.

VA

Verve AI

Contenido