Python: elementos positivos consecutivos de longitud máxima

A veces, mientras trabajamos con listas de Python, podemos tener un problema en el que monitoreamos una secuencia y necesitamos encontrar cuál fue la longitud máxima cuando solo ocurren elementos positivos. Este tipo de problema puede tener aplicación en dominios de datos. Analicemos ciertas formas en que se puede realizar esta tarea.

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

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

Método #1: Usar bucle
Esta es una de las formas en que realizamos esta tarea. En esta forma de fuerza bruta, iteramos para todos los elementos y seguimos actualizando al máximo, cada vez que se rompe la string de elementos positivos.

# Python3 code to demonstrate working of 
# Maximum length consecutive positive elements
# Using loop
  
# initializing list
test_list = [4, 5, -4, -1, -7, 2, 5, 6, -2, -9, -10]
  
# printing original list 
print("The original list : " + str(test_list))
  
# Maximum length consecutive positive elements
# Using loop
counter = 0           
max_score = 1
for ele in test_list:
    if ele > 0:
        counter += 1
    else:
        if(counter > 0):
            max_score = max(max_score, counter)
        counter = 0
if(counter > 0):
        max_score = max(max_score, counter)
  
# printing result 
print("Maximum elements run length : " + str(max_score))
Producción :

The original list : [4, 5, -4, -1, -7, 2, 5, 6, -2, -9, -10]
Maximum elements run length : 3

Método #2: Usargroupby() + defaultDict() + max()
La combinación de las funciones anteriores se puede usar para resolver este problema. En esto, realizamos la tarea de agrupar usando groupby(), podemos realizar la tarea de encontrar el máximo de ejecución máxima negativa y positiva agrupándolos contra diferentes claves y usando max() para encontrar el máximo de la lista al final.

# Python3 code to demonstrate working of 
# Maximum length consecutive positive elements
# Using groupby() + defaultDict() + max()
from collections import defaultdict
from itertools import groupby
  
# initializing list
test_list = [4, 5, -4, -1, -7, 2, 5, 6, -2, -9, -10]
  
# printing original list 
print("The original list : " + str(test_list))
  
# Maximum length consecutive positive elements
# Using groupby() + defaultDict() + max()
counter = defaultdict(list)
for key, val in groupby(test_list, lambda ele: "plus" if ele >= 0 else "minus"):
    counter[key].append(len(list(val)))
res = []
for key in ('plus', 'minus'):
    res.append(counter[key])
  
# printing result 
print("Maximum elements run length : " + str(max(res[0])))
print("Maximum negative elements run length : " + str(max(res[1])))
Producción :

The original list : [4, 5, -4, -1, -7, 2, 5, 6, -2, -9, -10]
Maximum elements run length : 3
Maximum negative elements run length : 3

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 *