我有一个功能wordScore(word,scoreList)。单词是一个只包含字母的字符串,scoreList是一个包含字母表中每个字母值的列表:
scoreList = [ ["a", 1], ["b", 3], ["c", 3], ["d", 2], ["e", 1],
["f", 4], ["g", 2], ["h", 4], ["i", 1], ["j", 8],
["k", 5], ["l", 1], ["m", 3], ["n", 1], ["o", 1], ["p", 3],
["q", 10], ["r", 1], ["s", 1], ["t", 1], ["u", 1], ["v", 4],
["w", 4], ["x", 8], ["y", 4], ["z", 10] ]
我必须找到一个单词的总分,然后使用map和reduce返回它。例如:
wordScore('agile', scoreList)
>>> 6
我相信我无法解决这个问题,因为我不确定地图是做什么的。我真的很感激一些帮助。
第二个问题:
所以现在给我一个字母列表(比如listOfwords = ["a", "am", "at", "apple", "bat", "bar", "babble", "can", "foo", "spam", "spammy", "zzyzva"]
)当我在scoreList(Rack)中输入一个字母列表(例如scoreList(["a", "s", "m", "t", "p"])
时,它应该输出所有可能的单词用listOfwords中的字母组成。所以基本上就是这样:
>>> scoreList(["a", "s", "m", "t", "p"])
[['a', 1], ['am', 4], ['at', 2], ['spam', 8]]
>>> scoreList(["a", "s", "m", "o", "f", "o"])
[['a', 1], ['am', 4], ['foo', 6]]
到目前为止,这是我的代码:
def scoreList(Rack):
test = [x for x in Dictionary if all(y in Rack for y in x)]
return test
然而,当我运行它时,它只给出了可以用字母表达的单词,而且我不确定如何获得每个单词的分数。我可以使用wordScore吗?同样的限制也适用。
答案 0 :(得分:0)
Map通过将函数应用于序列中的每个项来创建序列:
>>> map(lambda x: x + 1, [1, 2, 3])
[2, 3, 4]
所以要解决你的问题:
如果您可以使用dict
,请循环显示单词中的所有字母并将其映射到其分数。然后将所有字母分数与reduce相加:
def wordScore(word, score_list):
score_dict = dict(score_list)
letter_scores = map(lambda letter: score_dict[letter], word)
return reduce(lambda x, y: x + y, letter_scores)
如果你不能,可以循环分数列表中的所有字母,并将每个分数乘以字母中出现的字母数,然后将所有字母分数与reduce相加:
def wordScore(word, score_list):
letter_scores = map(
lambda letter_score: word.count(letter_score[0]) * letter_score[1],
score_list
)
return reduce(lambda x, y: x + y, letter_scores)