【问题标题】:Python Strings and AnagramsPython 字符串和字谜
【发布时间】:2016-06-24 09:37:54
【问题描述】:

这个程序接受用户的输入,例如“aeoritre”,并输出可以由这些字母组成的任何单词。 dictionary.txt 文件包含单词表。

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

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)))

【问题讨论】:

    标签: python string anagram


    【解决方案1】:

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

    result = list(getAnagrams(inp))
    result.sort(key=lambda x: len(x), reverse=True)
    print(result[0])
    

    【讨论】:

      【解决方案2】:

      用key(word)和values(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]
      

      【讨论】:

        猜你喜欢
        • 2020-10-28
        • 2016-06-23
        • 2021-12-12
        • 2011-09-11
        • 2014-04-13
        • 1970-01-01
        • 2019-11-20
        • 2015-05-11
        • 1970-01-01
        相关资源
        最近更新 更多