Segunda palabra más repetida en una secuencia en Python

Dada una secuencia de strings, la tarea es encontrar la segunda string más repetida (o frecuente) en la secuencia dada. (Teniendo en cuenta que no hay dos palabras que sean las segundas más repetidas, siempre habrá una sola palabra).

Ejemplos: 

Input : {"aaa", "bbb", "ccc", "bbb", 
         "aaa", "aaa"}
Output : bbb

Input : {"geeks", "for", "geeks", "for", 
          "geeks", "aaa"}
Output : for

Este problema tiene una solución existente, consulte la segunda palabra más repetida en un enlace de secuencia . Podemos resolver este problema rápidamente en Python usando el método Counter (iterador)
El enfoque es muy simple: 

  1. Cree un diccionario usando el método Counter (iterador) que contiene palabras como claves y su frecuencia como valor.
  2. Ahora obtenga una lista de todos los valores en el diccionario y ordénela en orden descendente. Elija el segundo elemento de la lista ordenada porque será el segundo más grande.
  3. Ahora recorra el diccionario nuevamente e imprima la clave cuyo valor es igual al segundo elemento más grande.

Implementación

Python3

# Python code to print Second most repeated
# word in a sequence in Python
from collections import Counter
 
 
def secondFrequent(input):
 
    # Convert given list into dictionary
    # it's output will be like {'ccc':1,'aaa':3,'bbb':2}
    dict = Counter(input)
 
    # Get the list of all values and sort it in ascending order
    value = sorted(dict.values(), reverse=True)
 
    # Pick second largest element
    secondLarge = value[1]
 
    # Traverse dictionary and print key whose
    # value is equal to second large element
    for (key, val) in dict.items():
        if val == secondLarge:
            print(key)
            return
 
 
# Driver program
if __name__ == "__main__":
    input = ['aaa', 'bbb', 'ccc', 'bbb', 'aaa', 'aaa']
    secondFrequent(input)
Producción

bbb

Complejidad temporal: O(nlogn) donde n es la longitud de la lista de entrada
Espacio auxiliar: O(n) donde n es la longitud de la lista de entrada

Implementación alternativa: 

Python3

# returns the second most repeated word
from collections import Counter
class Solution:
    def secFrequent(self, arr, n):
        all_freq = dict(Counter(arr))
        store = []
        for w in sorted(all_freq, key=all_freq.get):
            # if add key=all_freq.get will sort according to values
            # without key=all_freq.get will sort according to keys
            if w not in store:
                store.append(w)
             
        return store[-2]
# driver code or main function
if __name__ == '__main__':
    # no. of test cases
    t = 1
    for _ in range(t):
        # no of words
        n = 7
        # String of words
        arr = ["cat","mat","cat","mat","cat",'ball',"tall"]
        ob = Solution()
        ans = ob.secFrequent(arr,n)
        print(ans)
Producción

mat

Complejidad temporal: O(nlogn)
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 *