Python – Aplasta valores consecutivos de K

A veces, mientras trabajamos con listas de Python, podemos tener un problema en el que necesitamos realizar la eliminación de valores consecutivos duplicados de un elemento en particular. Este tipo de problema puede tener aplicaciones en muchos dominios, como la programación competitiva y el desarrollo web. Analicemos ciertas formas en que se puede realizar esta tarea.
 

Entrada : test_list = [4, 5, 5, 4, 3, 3, 5, 5, 5, 6, 5], K = 3 Salida: [4, 5, 5, 4, 3, 5, 5, 
5 , 6, 5]
Entrada : test_list = [1, 1, 1, 1], K = 1 
Salida : [1] 
 

Método #1: Usar zip() + yield 
La combinación de las funciones anteriores proporciona una de las formas de resolver este problema. En esto, llevamos a cabo la tarea de comprobar las duplicaciones de la consecución mediante la compresión de la lista de elementos actual y siguiente, y el rendimiento se utiliza para representar la base de la condición del elemento.
 

Python3

# Python3 code to demonstrate working of
# Squash consecutive values of K
# Using zip() + yield
 
# helper function
def hlper_fnc(test_list, K):
    for sub1, sub2 in zip(test_list, test_list[1:]):
        if sub1 == sub2 == K:
            continue
        else:
            yield sub1
    yield sub2      
 
# initializing list
test_list = [4, 5, 5, 4, 3, 3, 5, 5, 5, 6, 5]
 
# printing original list
print("The original list is : " + str(test_list))
 
# initializing K
K = 5
 
# Squash consecutive values of K
# Using zip() + yield
res = list(hlper_fnc(test_list, K))
 
# printing result
print("List after filtration : " + str(res))
Producción : 

The original list is : [4, 5, 5, 4, 3, 3, 5, 5, 5, 6, 5]
List after filtration : [4, 5, 4, 3, 3, 5, 6, 5]

 

 
Método #2: Usar yield + groupby() 
La combinación de las funciones anteriores se puede usar para resolver este problema. En esto, realizamos la tarea de agrupar usando groupby(), para verificar las consecuencias, y yield se usa para devolver elementos válidos.
 

Python3

# Python3 code to demonstrate working of
# Squash consecutive values of K
# Using yield + groupby()
import itertools
 
# helper function
def hlper_fnc(test_list, K):
    for key, val in itertools.groupby(test_list):
        if key == K:
            yield key
        else:
            yield from val   
 
# initializing list
test_list = [4, 5, 5, 4, 3, 3, 5, 5, 5, 6, 5]
 
# printing original list
print("The original list is : " + str(test_list))
 
# initializing K
K = 5
 
# Squash consecutive values of K
# Using yield + groupby()
res = list(hlper_fnc(test_list, K))
 
# printing result
print("List after filtration : " + str(res))
Producción : 

The original list is : [4, 5, 5, 4, 3, 3, 5, 5, 5, 6, 5]
List after filtration : [4, 5, 4, 3, 3, 5, 6, 5]

 

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 *