Python: agrupa cada ejecución creciente y decreciente en la lista

Dada una lista, la tarea es escribir un programa Python para agrupar cada ejecución creciente y decreciente. Esto se conoce como agrupación monótona. Una lista es monótona si es monótona creciente o monótona decreciente. Una lista A es monótona decreciente si para todo i <= j, A[i] >= A[j].

Ejemplo:

Entrada: test_list = [5, 6, 2, 9, 7, 1, 10, 4, 2, 1, 11, 12, 2]

Salida: [[5, 6], [2], [9], [7, 1], [10], [4, 2, 1], [11, 12], [2]]

Explicación: 6 > 5 y luego 2 es más pequeño que 6, por lo tanto, se vuelve decreciente y se inicia un nuevo grupo. 2 y 9 siendo elementos de punta o de tránsito, pertenecen a grupos individuales.

Entrada: test_list = [5, 6, 2, 9, 7, 1, 10, 4, 2, 1]

Salida: [[5, 6], [2], [9], [7, 1], [10], [4, 2, 1]]

Explicación: 6 > 5 y luego 2 es más pequeño que 6, por lo tanto, se vuelve decreciente y se inicia un nuevo grupo. 2 y 9 siendo elementos de punta o de tránsito, pertenecen a grupos individuales.

Ejemplo: Usar loop  + zip()

En esto, cada dos listas, cada una a partir del índice 0 y 1, se comprimen, y luego cada elemento de ambos se compara para verificar la ejecución y cambiar el indicador en consecuencia. El valor de la bandera inicial se evalúa en función de cuál de los 2 primeros elementos es mayor, la publicación de esa bandera se alterna para tener una agrupación de ejecución adecuada.

Python3

# Python3 code to demonstrate working of
# Monotonous grouping in List
# Using loop + zip()
  
# initializing list
test_list = [5, 6, 2, 9, 7, 1, 10, 4, 2, 1, 11, 12, 2]
               
# printing original list
print("The original list is : " + str(test_list))
  
res = []
temp = []
is_up = True 
if test_list[0] > test_list[1]:
    is_up = False
for curr, nex in zip(test_list, test_list[1:]):
    temp.append(curr)
      
    # checking for increasing or decreasing to change list
    if (nex > curr and not is_up) or (nex < curr and is_up):
        res.append(temp)
        temp = []
          
        # toggling 
        is_up = not is_up
  
temp.append(nex)
res.append(temp)
  
# printing result
print("Monotonous grouping : " + str(res))

Producción:

La lista original es: [5, 6, 2, 9, 7, 1, 10, 4, 2, 1, 11, 12, 2]

Agrupación monótona: [[5, 6], [2], [9], [7, 1], [10], [4, 2, 1], [11, 12], [2]]

Publicación traducida automáticamente

Artículo escrito por manjeet_04 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *