2016-10-08 1 views
1

私は関数wordScore(word、scoreList)を持っています。言葉は文字のみで構成された文字列であるとscoreListは、アルファベットの各文字の値を含むリストである:私は言葉の合計スコアを検索し、マップを使用してそれを返すと、削減する必要がmapとreduceを使って単語の各文字の値を求める

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] ] 

。例:

wordScore('agile', scoreList) 
>>> 6 

私はマップが何をしているのかわからないため、この問題を解決できないと思います。私は本当にいくつかの助けに感謝します。その後、 は、だから今私は(listOfwords = ["a", "am", "at", "apple", "bat", "bar", "babble", "can", "foo", "spam", "spammy", "zzyzva"]を言うことができます)文字のリストを与えられていなscoreList(["a", "s", "m", "t", "p"])としてscoreList(ラック)におけるI入力文字のリストを(それがなければならない出力可能性のあるすべての単語:

第2の課題私はこれを実行したときしかし、それだけで私はその言葉を与え

def scoreList(Rack): 
    test = [x for x in Dictionary if all(y in Rack for y in x)] 
    return test 

>>> 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]] 

これは、これまでの私のコードです:。だから、基本的には次のようになりますlistOfwordsにある文字で作られますできる手紙と一緒に作って、私はどのように各単語のスコアを取得するか分からない。 WordScoreを使うことができますか?同じ制限が適用されます。

+0

「scoreList」をdictに変換できますか?例えば: '{ '':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} ' – Hadrien

+0

悲しいことに、それはリストのままでなければなりません。もしできればもっと簡単だろう。 –

答えて

0

地図は、シーケンス内のすべての項目に関数を適用することにより、シーケンスを作成します。

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

だからあなたの問題解決するために:あなたはdictを使用できる場合

を、言葉やマップ内のすべての文字をループそれをスコアに合わせる。その後減らすと、すべての文字のスコア合計:あなたは、スコアリストのすべての文字をループし、その後、単語の文字の発生の数によって各スコアを乗算して、すべての文字のスコアを合計することができない場合は

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) 

を減らす:

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

+0

ありがとうございました! –

+0

もう一度お世話になりました。私はあなたが2番目の問題で私を助けることができるかどうか疑問に思っていました。オリジナルの投稿を詳細で編集しました。 –

関連する問題