Python | Anagramas de grupo de la lista dada

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))
Producción : 

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))
Producción : 

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *