Empaquetar la repetición de números consecutivos
Publicado por Jorge Alberto (50 intervenciones) el 22/12/2020 02:42:26
Hola. ¿Cómo están? Estoy con un ejercicio que me falta poco para terminar, pero no logro encontrar cómo (o capaz que tengo que rehacer todo y no lo veo jaja). El ejercicio dice:
Escribir una función empaquetar para una lista, donde empaquetar significa indicar la repetición de valores consecutivos mediante una tupla (valor, cantidad de repeticiones). Por ejemplo, empaquetar([1, 1, 1, 3, 5, 1, 1, 3, 3]) debe devolver [(1, 3), (3, 1), (5,1), (1, 2), (3, 2)].
El código que hice es:
En sí, el código consigue los pares de tuplas, pero no devuelve el último. Entiendo el por qué (o eso creo). El programa solamente inserta la tupla si el valor siguiente es distinto. Al llegar al último valor, no "observa" ningún nuevo valor y por eso no lo agrega. Mi pregunta es cómo hago para agregarlo.
Lo único que se me ocurrió es, una vez terminada la iteración, generar un nuevo conjunto de instrucciones que genere la última tupla y la agregue, pero se me hace que tiene que haber alguna manera de hacerlo en la iteración.
Muchas gracias.
Escribir una función empaquetar para una lista, donde empaquetar significa indicar la repetición de valores consecutivos mediante una tupla (valor, cantidad de repeticiones). Por ejemplo, empaquetar([1, 1, 1, 3, 5, 1, 1, 3, 3]) debe devolver [(1, 3), (3, 1), (5,1), (1, 2), (3, 2)].
El código que hice es:
1
2
3
4
5
6
7
8
9
10
11
12
def empaquetar(l):
lista, n = [],1 # 'lista' es donde se insertarán las tuplas. 'n' es la cantidad de repeticiones del numero hasta que cambia.
for i in range(0,len(l)-1):
if l[i]==l[i+1]: # Si el número es igual al que le sigue:
n = n + 1 # Sumar 1 a la cantidad de repeticiones
else: # Si no:
L = (l[i],n) # 'L' es la tupla que me piden (se creará una por cada par)
lista.append(L) # Insertar en 'lista'
n = 1 # 'n' tiene que volver a 1 para que el recuento del siguiente número no empiece desde terminó el otro.
return lista
En sí, el código consigue los pares de tuplas, pero no devuelve el último. Entiendo el por qué (o eso creo). El programa solamente inserta la tupla si el valor siguiente es distinto. Al llegar al último valor, no "observa" ningún nuevo valor y por eso no lo agrega. Mi pregunta es cómo hago para agregarlo.
Lo único que se me ocurrió es, una vez terminada la iteración, generar un nuevo conjunto de instrucciones que genere la última tupla y la agregue, pero se me hace que tiene que haber alguna manera de hacerlo en la iteración.
Muchas gracias.
Valora esta pregunta


0