以下Python代码应生成所有可能的后缀。因此,在输入[1,2,3]上,应生成以下内容:[[], [3], [2, 3], [1,2,3]]
def suffixes(lst):
return [lst [t:len(lst)+1-t] for t in range ( len(lst)+1, 0 , -1)]
print suffixes ([1, 2])
我一直得到以下输出:
[ [], [], [2] ]
答案 0 :(得分:3)
更简洁的方法可能就是这样做:
return [lst[t:] for t in range(len(lst), -1, -1)]
从列表末尾到开头,range
向后计数t
,并在您继续使用后缀。
您的解决方案不起作用的原因是因为len(lst+1)
,您可能希望len(lst)+1
。
此外,您在range
开始len(lst) + 1
,因此您获得[]
两次,因为在列表结尾之后开始的后缀与从结尾开始的后缀相同列表。
您还会在range
结束0
。因为range
在第二个参数上是独占的,所以您永远不会将整个列表作为后缀之一。您需要在range
结束-1
以在列表解析中包含t=0
。