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))
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))
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