[英]Find all combinations of a list
函數 scoreList(Rack) 接收一個字母列表。 你還會得到一個全局變量字典:["a", "am", "at", "apple", "bat", "bar", "babble", "can", "foo", "spam", “垃圾郵件”,“zzyzva”]。
使用字母列表查找可以用字典中的字母組成的所有可能的單詞。 對於可以制作的每個單詞,還可以使用 scrabbleScore 找到該單詞的分數。
拼字游戲分數 =
[ ["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、filter、reduce 等)、if 語句和 for 循環組成的表達式,但前提是它們在列表推導式的上下文中。
例子:
>>> 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]]
它們的顯示順序無關緊要。 它也必須保持一個列表而不是一個 dic。 希望對這個問題提供一些幫助,或者如果您能讓我更好地了解如何在這個問題中使用地圖或過濾器。
到目前為止我的代碼:
def scoreList(Rack):
result = [d for d in Dictionary if all(l in Rack for l in d)]
return result
我的輸出:
>>> scoreList(["a", "s", "m", "t", "p"])
['a', 'am', 'at', 'spam']
如您所見,我已經找到了如何輸出單詞而不是分數的方法。 我也沒有弄清楚如何實現 map、filter 或任何其他列表推導式的使用。
顯然你反復問同樣的問題(根據對你的問題的評論)。 所以我會盡可能徹底地回答這個問題
您似乎在名為Dictionary
的列表中有一個拼字游戲Dictionary
。 我將從這一點向前推進:
import itertools
def scoreList(rack):
points = dict([ ["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] ])
validWords = set(Dictionary)
answer = []
for l in range(1, len(rack)):
for word in itertools.permutations(rack, l):
if not word in validWords: continue
answer.append(word, sum(points[char] for char in word))
return answer
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.