Menu
Coddy logo textTech

Segmentación de listas con Take Drop

Parte de la sección Fundamentos del Journey de Kotlin de Coddy. Lección 80 de 93.

Kotlin proporciona dos métodos más sencillos para extraer partes de una lista cuando solo necesitas elementos del principio o del final: take() y drop().

El método take() devuelve una lista nueva que contiene los primeros n elementos:

val numbers = listOf(10, 20, 30, 40, 50)
val firstThree = numbers.take(3)
println(firstThree)  // [10, 20, 30]

El método drop() hace lo contrario. Omite los primeros n elementos y devuelve el resto:

val numbers = listOf(10, 20, 30, 40, 50)
val afterTwo = numbers.drop(2)
println(afterTwo)  // [30, 40, 50]

A diferencia de subList(), estos métodos devuelven copias independientes en lugar de vistas. También son más legibles cuando simplemente quieres «los primeros» elementos o «todo excepto los primeros».

Puedes combinar ambos métodos para extraer una sección intermedia:

val letters = listOf("A", "B", "C", "D", "E")
val middle = letters.drop(1).take(3)
println(middle)  // [B, C, D]

Si solicitas más elementos de los que existen, estos métodos simplemente devuelven lo que está disponible sin producir un error:

val short = listOf(1, 2)
println(short.take(10))  // [1, 2]
println(short.drop(10))  // []
challenge icon

Desafío

Intermedio

Recibirás una lista de enteros y dos números: cuántos elementos descartar desde el principio y cuántos elementos tomar después de descartar.

Usa drop() y take() juntos para extraer una sección intermedia de la lista y después imprime los elementos extraídos.

Formato de entrada:

  • Primera línea: un entero n que representa el número de elementos
  • Siguientes n líneas: enteros que se añadirán a la lista
  • Siguiente línea: el número de elementos que se descartarán desde el principio
  • Última línea: el número de elementos que se tomarán después de descartar

Formato de salida:

Imprime la lista resultante en el formato de lista predeterminado de Kotlin.

Ejemplo:

Si la lista es [10, 20, 30, 40, 50, 60], drop es 2 y take es 3, la salida debería ser:

[30, 40, 50]

Pruébalo tú mismo

fun main() {
    // Lee el número de elementos
    val n = readLine()!!.toInt()
    
    // Lee los elementos de la lista
    val list = mutableListOf<Int>()
    for (i in 1..n) {
        list.add(readLine()!!.toInt())
    }
    
    // Lee los valores de drop y take
    val dropCount = readLine()!!.toInt()
    val takeCount = readLine()!!.toInt()
    
    // TODO: Escribe tu código debajo
    // Usa drop() y take() para extraer la sección intermedia
    
    
    // Imprime el resultado
    println(result)
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos

Practica por tu cuenta: Playground de Kotlin