вот впечатляющее решение.
func alphabet_count_mapper:
для каждого слова в файле / списке
1.создать словарь алфавитов / символов с начальным счетомкак 0.
2. сохранить счетчик всех алфавитов в слове и увеличить счетчик в указанном выше алфавите.
3.создать счетчик алфавита и вернуть кортеж из значенийАлфавит dict.
func anagram_counter:
1.создать словарь с кортежем алфавита в качестве ключа и счетчиком количества совпадений против него.
2.iterate overприведенный выше дикт и если значение> 1, добавьте значение к счетчику анаграмм.
import sys
words_count_map_dict = {}
fobj = open(sys.argv[1],"r")
words = fobj.read().split('\n')[:-1]
def alphabet_count_mapper(word):
alpha_count_dict = dict(zip('abcdefghijklmnopqrstuvwxyz',[0]*26))
for alpha in word:
if alpha in alpha_count_dict.keys():
alpha_count_dict[alpha] += 1
else:
alpha_count_dict.update(dict(alpha=0))
return tuple(alpha_count_dict.values())
def anagram_counter(words):
anagram_count = 0
for word in words:
temp_mapper = alphabet_count_mapper(word)
if temp_mapper in words_count_map_dict.keys():
words_count_map_dict[temp_mapper] += 1
else:
words_count_map_dict.update({temp_mapper:1})
for val in words_count_map_dict.values():
if val > 1:
anagram_count += val
return anagram_count
print anagram_counter(words)
запустите его с путем к файлу в качестве аргумента командной строки