List1中的单词可以由List2中的字母拼写

时间:2014-01-19 19:34:36

标签: python

我是编码和python的新手,我正在OpenHatch尝试一个Scrabble Challenge的版本:https://openhatch.org/wiki/Scrabble_challenge

目标是检查列表中的每个单词是否可以拼贴在拼贴架中。我写了一个for循环来检查单词中的每个字母是否都在tile rack中,如果是,则从机架中删除该字母(以处理重复项)。但是,如果for循环发现单词的每个字母都在机架中,我很难理解如何在我的valid_word列表中添加单词。

在这个例子中,'age'应该是有效的,但'gag'不应该是,因为机架中只有一个'g'。

word_list = ['age', 'gag']
rack = 'page'
valid_words = []

for word in word_list:
    new_rack = rack
    for x in range(len(word)):
        if word[x] in new_rack:
            new_rack = new_rack.replace(str(word[x]), "")

1 个答案:

答案 0 :(得分:2)

我可能会在这里使用Counter来简化操作。 Counter类的作用是创建迭代中的项到其频率的映射。我可以用它来检查单个字符的频率是否大于机架中的频率,并相应地打印单词。

>>> from collections import Counter
>>> word_list = ['age', 'gag']
>>> rack = Counter('page')
>>> print rack
Counter({'a': 1, 'p': 1, 'e': 1, 'g': 1})
>>> for word in word_list:
        word_count = Counter(word)
        for key, val in word_count.iteritems():
            if rack[key] < val:
                break
        else:
            print word


age # Output.

此外,Counter具有nice属性,如果0类中不存在给定键,则返回Counter。因此,我们可以跳过检查以查看磁贴是否具有密钥,因为在这种情况下rack[key] < val将失败。