Python: verifique los elementos de pico alternativos en la lista

Dada una lista, prueba t si es alternativa, es decir, los elementos siguientes y anteriores son más pequeños o más grandes en toda la lista.

Entrada : test_list = [2, 4, 1, 6, 4, 8, 0] 
Salida : Verdadero 
Explicación : 4, 6, 8 son alternas y picos (2 1).

Entrada : test_list = [2, 4, 1, 6, 4, 1, 0] 
Salida : Falso 
Explicación : 1 no es pico (4 < 1 < 0). 
 

Método #1: Usar loop .

En esto, verificamos para cada elemento los elementos siguientes y anteriores usando la declaración condicional if para que sea más pequeña o más grande, si se encuentra alguna variación, el resultado se marca como falso y se sale del ciclo.

Python3

# Python3 code to demonstrate working of
# Test for alternate peak List
# Using loop
  
# initializing list
test_list = [2, 4, 1, 6, 4, 8, 0]
               
# printing original list
print("The original list is : " + str(test_list))
  
res = True 
for idx in range(1, len(test_list) - 1):
      
    # breaking if not alternate peaks
    if not ((test_list[idx - 1] < test_list[idx] 
             and test_list[idx + 1] < test_list[idx])
            or (test_list[idx - 1] > test_list[idx] 
                and test_list[idx + 1] > test_list[idx])):
        
        res = False
          
# printing result
print("Is list forming alternate peaks ? : " + str(res))

Producción:

The original list is : [2, 4, 1, 6, 4, 8, 0]
Is list forming alternate peaks ? : True

Método #2: Usando all() + generador de expresión .

En esto, realizamos la tarea de verificar todos los elementos para obtener picos alternativos usando all(), y la expresión del generador se usa para recorrer toda la lista. 

Python3

# Python3 code to demonstrate working of
# Test for alternate peak List
# Using all() + generator expression
  
# initializing list
test_list = [2, 4, 1, 6, 4, 8, 0]
               
# printing original list
print("The original list is : " + str(test_list))
  
# checking for all the elements for alternate peaks 
# one liner solution to problem
res = all(((test_list[idx - 1] < test_list[idx]
            and test_list[idx + 1] < test_list[idx]) 
           or (test_list[idx - 1] > test_list[idx] 
               and test_list[idx + 1] > test_list[idx]))
          for idx in range(1, len(test_list) - 1))
          
# printing result
print("Is list forming alternate peaks ? : " + str(res))

Producción:

The original list is : [2, 4, 1, 6, 4, 8, 0]
Is list forming alternate peaks ? : True

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 *