Método groupby de Python para eliminar todos los duplicados consecutivos

Dada una string S, elimine todos los duplicados consecutivos. Ejemplos:

Input  : aaaaabbbbbb
Output : ab

Input : geeksforgeeks
Output : geksforgeks

Input : aabccba
Output : abcba

Tenemos una solución existente para este problema, consulte Eliminar todos los duplicados consecutivos del enlace de string. Podemos resolver este problema en python rápidamente usando el método itertools.groupby() .

¿Cómo funciona itertools.groupby(iterable,key[opcional]) en Python?

Agrupar por método toma dos entradas, una es iterable (lista, tupla, diccionario) y la segunda es la función clave que calcula las claves para cada elemento presente en iterable. Devuelve clave e iterable de elementos agrupados. Si la función clave no se especifica o es Ninguna, la clave se establece de forma predeterminada en una función de identidad y devuelve el elemento sin cambios. Por ejemplo, 

Python3

numbers = [1, 1, 1, 3, 3, 2, 2, 2, 1, 1]
import itertools
for (key,group) in itertools.groupby(numbers):
    print (key,list(group))
Producción

1 [1, 1, 1]
3 [3, 3]
2 [2, 2, 2]
1 [1, 1]

Python3

# function to remove all consecutive duplicates
# from the string in Python
 
from itertools import groupby
def removeAllConsecutive(input):
     
    # group all consecutive characters based on their
    # order in string and we are only concerned
    # about first character of each consecutive substring
    # in given string, so key value will work for us
    # and we will join these keys without space to
    # generate resultant string
    result = []
    for (key,group) in groupby(input):
        result.append(key)
 
    print (''.join(result))
     
# Driver program
if __name__ == "__main__":
    input = 'aaaaabbbbbb'
    removeAllConsecutive(input)
Producción

ab

Complejidad temporal : O(n) 
Espacio auxiliar : O(n)

Publicación traducida automáticamente

Artículo escrito por Shashank Mishra 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 *