检查Python中字母列表中是否包含所有字符串

时间:2014-03-05 03:35:19

标签: python

我正在尝试在Python中编写一个Scrabble有效字检查函数。我需要查看列表中是否包含单词中的所有字母,但是一旦我匹配字母,我就不能再使用它了。因此,如果我的单词是'test'而且我的列表是['t','a','e','s'],那么它应该返回False,因为我需要2 t。

这是我的想法:

def validWord(word, letterList):
  for x in word:
    if x in letterList:
      letterList = letterList.remove(x)
    else:
      return False
  return True

但是编译时我遇到了这个错误: TypeError:'NoneType'类型的arument不可迭代

现在我猜测“if letter in letterList”只能运行一次而不能迭代。所以现在我希望有人能给我一个正确的方向。这只是为了我的乐趣,我打算用它来创建一个“与朋友骗子的话”,并向我的朋友们展示。

谢谢!

1 个答案:

答案 0 :(得分:1)

list.remove返回None,您将其分配给letterList。在下一次迭代中,它变为if x in None,其中in运算符尝试迭代None并因该错误而失败。所以,改变

letterList = letterList.remove(x)

letterList.remove(x)

你可以像这样解决这个问题

from collections import Counter

def validWord(word, letterList):
    word2, word1 = Counter(word), Counter(letterList)
    return all(word2[k] <= word1.get(k, 0) for k in word2)

print validWord("test", ["t", "a", "e", "s"])  # False
print validWord("test", ["t", "e", "t", "s"])  # True