检查字符串的所有字母是否都包含在字母列表中(Python)

2 投票
1 回答
3580 浏览
提问于 2025-04-17 20:53

我正在尝试用Python写一个可以检查Scrabble(拼字游戏)有效单词的函数。我需要查看一个字母列表中是否包含单词的所有字母,但一旦匹配到一个字母,就不能再使用它了。比如,如果我的单词是'test',而我的字母列表是['t', 'a', 'e', 's'],那么结果应该是False,因为我需要两个't'。

这是我的想法:

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

但是在我编译的时候出现了这个错误:TypeError: arument of type 'NoneType' is not iterable

现在我猜测“if x in letterList”这个判断只能运行一次,而不能重复使用。所以我希望有人能给我一些正确的方向。这只是我个人的一个小项目,我打算用这个来制作一个“朋友之间的单词作弊工具”,然后给我的朋友们看看。

谢谢!

1 个回答

3

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

撰写回答