尝试写word
list
中hand
并且仅由word
中的字母组成的函数返回True。我可以检查list
中是否 word = 'chayote'
hand = {'a': 1, 'c': 2, 'u': 2, 't': 2, 'y': 1, 'h': 1, 'z': 1, 'o': 2}
list = ['peach', 'chayote']
def ValidWord(word, hand, list):
if word in list:
for i in word:
if i in hand:
return True
return False
else:
return False
ValidWord(word, hand, list)
,但无法弄清楚如何迭代检查第二部分。以下错误地返回True:
{{1}}
答案 0 :(得分:1)
解决此问题的最简单方法是使用collections.Counter
,就像这样
from collections import Counter
def is_valid_word(word, hand, list):
if word in my_list:
return len(Counter(word) - Counter(hand)) == 0
return False
my_list = ['peach', 'chayote']
hand = {'a': 1, 'c': 2, 'u': 2, 't': 2, 'y': 1, 'h': 1, 'z': 1, 'o': 2}
print is_valid_word("chayote", hand, my_list)
# False
print is_valid_word("peach", hand, my_list)
# False
答案 1 :(得分:1)
我认为您可以使用all
来执行此操作,可能更简洁:
if all(i in hand for i in words):
return True
如果计数很重要,请参阅@ thefourtheye的答案。
答案 2 :(得分:0)
您可以更改for循环中的返回值:
word = 'chayote'
word2 = 'peach'
hand = {'a': 1, 'c': 2, 'u': 2, 't': 2, 'y': 1, 'h': 1, 'z': 1, 'o': 2, 'e': 2} # I added 'e' so chayote is true and peach is false
list = ['peach', 'chayote']
def ValidWord(word, hand, list):
if word in list:
for i in word:
if i not in hand:
return False
return True
else:
return False
print(ValidWord(word, hand, list))
print(ValidWord(word2, hand, list))
答案 3 :(得分:0)
如果计算事项扩大了Gnijuohz的解决方案:
def ValidWord(word,hand,list):
return word in list and all(i in hand for i in word) and all(hand[key]>=word.count(key) for key in hand.keys())
如果字母中出现的字母多于值[hand],则返回False。
如果您希望手字典指定的单词中至少包含每个字母的数量,只需将其更改为hand[key]<=word.count(key)
即可。
据我所知,最后一种方式相当于thefourtheye使用Counter