Todos los Anagramas
Descripción
En un ejercicio previo, creamos una función para verificar si dos cadenas eran anagramas, para esto, ordenamos las letras de ambas palabras y verificamos si las letras ordenadas eran las mismas. Ahora haremos el problema algo más retador.
Escribe un programa que tome una lista de palabras e imprima todos los consjuntos de palabras que son anagramas. Este es un ejemplo de cómo se podría ver la salida del programa:
['deltas', 'desalt', 'lasted', 'salted', 'slated', 'staled']
['retainers', 'ternaries']
['generating', 'greatening']
['resmelts', 'smelters', 'termless']
Consejo: Ordena las letras de cada palabra en la lista de palabras del archivo words.txt, y concatenalas para formar una cadena. Crea un diccionario que asocie la palabra ordenada a una lista de palabras de las cuales es anagrama.
Ejemplo de Ejecución:
anagrams.py
Salida limitada a las últimas 5000 líneas.
['frenetic', 'infecter', 'reinfect']
['frenetics', 'infecters', 'reinfects']
['fresher', 'refresh']
['freshest', 'freshets']
['freshet', 'hefters']
['fret', 'reft', 'tref']
['fretful', 'truffle']
['fretsaw', 'wafters']
['friaries', 'rarifies']
['friary', 'rarify']
['friending', 'infringed', 'refinding']
...
Solución
Mostrar solución
with open('/content/drive/MyDrive/words.txt') as f:
word_list = f.read().split()
anagrams = {}
for word in word_list:
key = ''.join(sorted(word))
if key in anagrams:
anagrams[key].append(word)
else:
anagrams[key] = [word]
for key, value in anagrams.items():
if len(value) > 1:
print(value)
Fuente del ejercicio: https://allendowney.github.io/ThinkPython/chap11.html#id3