Los anagramas son las palabras que están formadas por elementos similares, pero difieren en el orden en que aparecen estos caracteres. A veces, podemos encontrarnos con un problema en el que necesitamos agrupar los anagramas y, por lo tanto, la solución al problema anterior siempre ayuda. Vamos a discutir ciertas formas en que esto se puede hacer.
Método n.º 1: Usar defaultdict() + sorted() + valores()
La combinación de las funciones anteriores se puede usar para obtener la solución del problema anterior. En esto, primero agrupamos los anagramas usando defaultdict y usamos la función ordenada para obtener el valor raíz de cada anagrama para agrupar anagramas.
Python3
# Python3 code to demonstrate # Grouping Anagrams # using defaultdict() + sorted() + values() from collections import defaultdict # initializing list test_list = ['lump', 'eat', 'me', 'tea', 'em', 'plum'] # printing original list print("The original list : " + str(test_list)) # using defaultdict() + sorted() + values() # Grouping Anagrams temp = defaultdict(list) for ele in test_list: temp[str(sorted(ele))].append(ele) res = list(temp.values()) # print result print("The grouped Anagrams : " + str(res))
The original list : ['lump', 'eat', 'me', 'tea', 'em', 'plum'] The grouped Anagrams : [['me', 'em'], ['lump', 'plum'], ['eat', 'tea']]
Método n.º 2: usar la comprensión de listas + sorted() + lambda + groupby()
La combinación de la función anterior también se puede usar para realizar esta tarea en particular. La función groupby realiza la agrupación necesaria. La función lambda ayuda a agrupar anagramas similares.
Python3
# Python3 code to demonstrate # Grouping Anagrams # using list comprehension + sorted() + lambda + groupby() from itertools import groupby # initializing list test_list = ['lump', 'eat', 'me', 'tea', 'em', 'plum'] # printing original list print("The original list : " + str(test_list)) # using list comprehension + sorted() + lambda + groupby() # Grouping Anagrams temp = lambda test_list: sorted(test_list) res = [list(val) for key, val in groupby(sorted(test_list, key = temp), temp)] # print result print("The grouped Anagrams : " + str(res))
The original list : ['lump', 'eat', 'me', 'tea', 'em', 'plum'] The grouped Anagrams : [['me', 'em'], ['lump', 'plum'], ['eat', 'tea']]
Método 3: uso de la programación Python simple
A continuación se muestra el programa para agrupar palabras de anagramas en una forma simple de programación de Python. Sin usar comprensión de lista o lambda o métodos importados.
El método seguido es simple:
1. Ordene cada palabra y use la palabra ordenada como clave de diccionario
2. Siga agregando nuevas palabras en el diccionario contra la clave ordenada
Python3
data = ['eat', 'ate', 'tea', 'ant', 'tan', 'bat', 'adobe', 'abode', 'listen', 'silent'] def createAnagramKey(string): key = '' for ch in sorted(string): key += ch return str(key) def groupAnagramWords(data): group = dict() for ele in data: if group.get(createAnagramKey(ele)) == None: group[createAnagramKey(ele)] = [ele] else: group[createAnagramKey(ele)].append(ele) return group anagram_grouped = groupAnagramWords(data) # Anagram in dictionary format print('In dictionary format') print(anagram_grouped) anagram_grouped_list = list() for k, v in anagram_grouped.items(): anagram_grouped_list.append(v) print('In list format') print(anagram_grouped_list)
Producción:
In dictionary format {'aet': ['eat', 'ate', 'tea'], 'ant': ['ant', 'tan'], 'abt': ['bat'], 'abdeo': ['adobe', 'abode'], 'eilnst': ['listen', 'silent']} In list format [['eat', 'ate', 'tea'], ['ant', 'tan'], ['bat'], ['adobe', 'abode'], ['listen', 'silent']]
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