我是编码和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]), "")
答案 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
将失败。