簡體   English   中英

查找列表的所有組合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM