为了从列表 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被修改。有没有简单的方法来解决这个问题?