【问题标题】:Finding the value of each letter in a word using map and reduce使用 map 和 reduce 查找单词中每个字母的值
【发布时间】:2016-10-10 05:11:23
【问题描述】:

我有一个函数 wordScore(word, scoreList)。 word 是一个只包含字母的字符串,而 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"]) 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 吗?同样的限制也适用。

【问题讨论】:

  • 你能把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}
  • 遗憾的是,它必须保留一个列表。如果可以的话会容易得多。

标签: python-2.7 dictionary reduce


【解决方案1】:

Map 通过对序列中的每个项目应用函数来创建序列:

>>> map(lambda x: x + 1, [1, 2, 3])
[2, 3, 4]

所以要解决你的问题:

如果您可以使用dict,则循环遍历word 中的所有字母并将其映射到其分数。然后用 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)

阅读map documentation in python 2.7

【讨论】:

  • 嘿,再次感谢您的帮助。我想知道你是否可以帮助我解决第二个问题。我已经用详细信息编辑了原始帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-24
  • 1970-01-01
  • 2015-05-13
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多