リストliから長さrのすべての(おそらく連続していない)サブリストを抽出するために、関数を書きました
def sublist(li, r):
output = list()
if r == 1:
return [ [element] for element in li ]
for firstelement in [1,len(li)-r+1]:
output += [ [li[firstelement-1]] + smallerlist for smallerlist in sublist(li[firstelement:],r-1) ]
return output
うまくいかないようです:
sage: li = [20, 17, 33, 3001]
sage: sublist(li, 2)
[[20, 17], [20, 33], [20, 3001], [33, 3001]]
17 で始まるサブリストが飛び越えていることに注意してください。問題は、再帰呼び出し中にカウンターのfirstelementが変更されることです。これを修正する簡単な方法はありますか?