Python字符串和字谜

时间:2016-03-09 19:52:15

标签: python string anagram

这个编程接收来自用户的输入,例如" aeoritre"并输出可以从这些字母中产生的任何单词。 dictionary.txt文件包含wordlist。

我的问题是如何输出字符串匹配的最长单词而不是打印所有单词?如果单词被绑定的时间最长,则只输出其中一个。提前谢谢!

from collections import Counter

words = []


def isAnAnagram(word, user):
    word_counter = Counter(word)
    input_counter = Counter(user)
    return all(count <= input_counter[key] for key, count in word_counter.items())

def getAnagrams(user):
    lister = [word for word in words if len(word) <= len(user) ]
    for item in lister:
        if isAnAnagram(item, user):
            yield item


with open('Dictionary.txt', 'r') as f:
    allwords = f.readlines()
f.close()

for x in allwords:
    x = x.rstrip()
    words.append(x)
inp = 1


while inp != "99":
    inp = input("enter word:")
    result = getAnagrams(inp)
    print(list(result))
    print(len(list(result)))

2 个答案:

答案 0 :(得分:1)

一种简单的方法是按降序(反向)顺序按长度对结果列表进行排序并打印第一个元素:

ubuntu 14.04

答案 1 :(得分:0)

使用键(word)和值(len(word))创建一个字典,然后对字典进行排序并获取排序结果的最后一个值。

import operator
resultDict = {i: len(i) for i in list(result)}
sortedresult = sorted(resultDict.items(), key=operator.itemgetter(1))
print sortedresult[-1][0]