use*_*589 0 python algorithm io anagram equation-solving
我写了一个anagram求解算法,但是没有用.
for word in wordlist: #Checking for equal length
if sorted(word.replace("\n", "")) == sorted(anagram):
possible.append(word)
Run Code Online (Sandbox Code Playgroud)
我需要使用len(word) - 1来取走\n.
(1)我不理解你的第一个循环中"len(word)-1"中的"-1".
(2)你的第二个循环有几个问题:
它不会检查字母是否相同,它会检查字谜中的每个字母是否都在单词中.你没有使用计数信息,所以你无法区分博克和书.您还要从正在迭代的序列中删除,这会导致意外行为.
就我而言,我只是使用
sorted_anagram = sorted(anagram)
possibles = [word for word in wordlist if sorted(word) == sorted_anagram]
Run Code Online (Sandbox Code Playgroud)
而不是显式的循环.
请注意,对单词进行排序是一种规范化过程 - 它确保任何两个彼此为字母的单词将采用相同的格式.另一种确定两件事是否为字谜的方法是确保字母数相同:
>>> from collections import Counter
>>> Counter('book')
Counter({'o': 2, 'k': 1, 'b': 1})
>>> Counter('obko')
Counter({'o': 2, 'k': 1, 'b': 1})
>>> Counter('bok')
Counter({'k': 1, 'b': 1, 'o': 1})
>>>
>>> Counter('book') == Counter('boko')
True
>>> Counter('book') == Counter('bok')
False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
612 次 |
| 最近记录: |