Como duplicar los elementos de una lista excluyendo los extremos en python

publicado por: Anonymous

Tengo las siguientes listas en python

lista_x = [2,3,4,5]
lista_y = [6,7,8,9]

Intento replicar el elemento actual (excluyendo los extremos) a la siguiente posicion. De modo que obtenga algo similar a esto:

lista_x = [2,3,3,4,4,5]
lista_y = [6,7,7,8,8,9]

Tengo este codigo, pero no he podido lograr mi objetivo

for i in range(len(lista_x)):
    if(i != 0 and i!=len(lista_x)):    #Exluyendo extremos
        lista_x.insert(i,lista_x[i])    #Agrega el valor actual 
        lista_y.insert(i,lista_y[i])

solución

Esta pregunta tiene pintas de tratase de un ejercicio que busca que obtengas una solución ingeniosa al problema planteado.

En general, cuando haya que procesar una lista, lo primero que debes conocer son los distintos métodos y funciones que operan con listas y buscar si alguno de ellos puede serte de utilidad. Uno de los más potentes es zip con el que puedes mezclar listas. Con un poco de perspicacia, se puede ver que si haces un zip de la lista consigo misma, puedes llegar a algo muy próximo a lo que necesitas:

>> lista = [2, 3, 4, 5]
>> resultado = zip(lista, lista[1:])

El resultado:

>> print(list(resultado))
[(2, 3), (3, 4), (4, 5)]

Lo que falta es concatenar todas esas tuplas y obtendrías la solución. Para concatenar podrías crear un bucle que fuera añadiendo cada tupla, pero hay otra forma más directa usando la función sum:

sum(zip(lista, lista[1:]), ())

El elemento inicial es la tupla vacía () al que se va concatenando (sumando) las tuplas que obtenemos mediante zip para obtener una tupla. Como nos piden una lista, habrá que convertir la tupla en lista.

Poniendo todo en su sitio, la solución es:

resultado = list(sum(zip(lista, lista[1:]), ()))
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *