2013-12-11 44 views
0

以下Python代碼應該生成所有可能的後綴。因此,對輸入[1,2,3],應生成以下:[[], [3], [2, 3], [1,2,3]]Python後綴生成器

def suffixes(lst): 
    return [lst [t:len(lst)+1-t] for t in range (len(lst)+1, 0 , -1)] 

print suffixes ([1, 2]) 

我不斷收到以下輸出:

[ [], [], [2] ] 

回答

3

一個更清潔的方式做到這一點很可能是做這樣的:

return [lst[t:] for t in range(len(lst), -1, -1)] 

ranget向後從列表中開始的結束,以後綴爲你去。

您的解決方案無法正常工作的原因是由於len(lst+1),您可能打算成爲len(lst)+1

此外,您啓動rangelen(lst) + 1,讓您得到[]兩次,因爲列表結束後開始的後綴是一樣開始在列表的最後的後綴。

你也結束你的range0。因爲range在第二個參數上是排他性的,所以您從不會將整個列表作爲後綴之一。你需要結束range-1包括t=0在列表中的理解。

+0

太快了,太棒了! – aIKid

+0

它不是很乾淨,只是以相反的順序給出結果。 – StoryTeller

+0

問題是按照[[],[3],[2,3],[1,2,3]]'的順序詢問結果,這就是我的解決方案。 – AVP