Python - Empaquetar la repetición de números consecutivos

 
Vista:
Imágen de perfil de Jorge Alberto
Val: 137
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Empaquetar la repetición de números consecutivos

Publicado por Jorge Alberto (48 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:

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jorge Alberto
Val: 137
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Empaquetar la repetición de números consecutivos

Publicado por Jorge Alberto (48 intervenciones) el 22/12/2020 02:59:36
Perdón, pero una vez más pude resolver el problema. Lo que hice fue anidar un segundo 'if' al primero.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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:
      if i!=len(l)-2:                 # Si no es el último dígito de la lista:
        n = n + 1                       # Sumar 1 a la cantidad de repeticiones
      else:
        n = n + 1                     # Si ES el último dígito:
        L = (l[i],n)                    # 'L' es la tupla que necesito
        lista.append(L)                 # Agregar a 'lista'
 
    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

Seguramente hayan formas más elegantes de solucionarlo y mejores funciones, pero recién arranco con esto y es lo mejor que puedo hacer. Como siempre, aunque el problema este solucionado, cualquier comentario es bienvenido.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Empaquetar la repetición de números consecutivos

Publicado por joel (901 intervenciones) el 22/12/2020 08:26:24
Gracias por compartirlo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge Alberto
Val: 137
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Empaquetar la repetición de números consecutivos

Publicado por Jorge Alberto (48 intervenciones) el 22/12/2020 16:34:04
Gracias por el aporte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar