Словарь, ключом которого является отсортированная версия слова:
word_list = ['yek','lion','eky','ekky','kkey','opt']
from collections import defaultdict
word_index = defaultdict(set)
for word in word_list:
idx = tuple(sorted(word))
word_index[idx].add(word)
# word_index = {
# ('e', 'k', 'y'): {'yek', 'eky'},
# ('i', 'l', 'n', 'o'): {'lion'},
# ('e', 'k', 'k', 'y'): {'kkey', 'ekky'},
# ('o', 'p', 't'): {'opt'}
# }
Тогда для запроса вы должны сделать:
def find_a4(word_index, word):
idx = tuple(sorted(word))
return len(word_index[idx])
Или, если вам нужно вернуть фактические слова, измените его на return word_index[idx]
.
Эффективность: запросы выполняются в среднем за O (1) время .