У меня есть фрагмент кода, который проверяет анаграммы длинного списка слов. Я пытаюсь найти способ перебрать каждое слово в моем длинном списке слов, чтобы найти другие анаграммы, которые могут соответствовать этому слову. Некоторые слова должны иметь более одной анаграммы в моем списке слов, но я не могу найти решение, чтобы присоединиться к анаграммам, найденным в моем списке.
set(['biennials', 'fawn', 'unsupportable', 'jinrikishas', 'nunnery', 'deferment', 'surlinesss', 'sonja', 'bioko', 'devon'] ect...
Поскольку я использовал наборы, набор никогда не читается до конца и возвращает только самые короткие слова. Я знаю, что должно быть больше. Я пытался перебрать свой ключ по всему набору words
, чтобы найти все те, которые являются анаграммами моего ключа.
anagrams_found = {'diss': 'sids', 'abels': 'basel', 'adens': 'sedna', 'clot': 'colt', 'bellow': 'bowell', 'cds': 'dcs', 'doss': 'sods', '
als': 'las', 'abes': 'base', 'fir': 'fri', 'blot': 'bolt', 'ads': 'das', 'elm': 'mel', 'hops': 'shop', 'achoo': 'ochoa'... and more}
Мне было интересно, где мой код оборвался. Он должен найти намного больше анаграмм из моего словаря слов Linux. Может ли кто-нибудь увидеть, что не так с моим фрагментом кода? Проще говоря, сначала программа перебирает каждое слово, которое у меня есть, а затем проверяет, содержат ли наборы мои ключи. Позже в мой словарь будут добавлены ключи для слов, которые также будут соответствовать моему тому же key
. Если уже есть key
, для которого я добавил анаграмму, я обновлю свой словарь, объединив старое значение dict с новым словом (анаграмма)
anagram_list = dict()
words = set(words)
anagrams_found = []
for word in words:
key = "".join(sorted([w for w in word]))
if (key in words) and (key != word):
anagrams_found.append(word)
for name, anagram in anagram_list.iteritems():
if anagram_list[name] == key:
anagram = " ".join([anagram],anagram_found)
anagram_list.update({key:anagram})
anagram_list[key] = word
return anagram_list
В общем, возможно, эта программа неэффективна. Может кто-нибудь объяснить недостатки моего кода?
anagram_list
во время итерации. Для быстрой проверки заменитеiteritems()
на простойitems()
и посмотрите, исправит ли это что-нибудь. - person Tim Peters   schedule 08.10.2013