python中后缀数组的变化

时间:2015-05-03 23:16:55

标签: python arrays

我对计算机科学比较陌生,而且我正在学习如何用python编写代码。我试图弄清楚如何创建一个带有列表的函数,并从输入列表中返回一个后缀列表,从最短长度到最长长度。例如,输入     [3,4,2,-9,7,6,1] 该函数将返回     [[],[1],[6,1],[7,6,1],[-9,7,6,1],[2,-9,7,6,1],[4,2,-9,7,6,1],[3,4,2,-9,7,6,1]]

我尝试了几种方法,但到目前为止我没有太多运气。以下是我到目前为止的情况:

def h(m):
    newlist = []
    x = 0
    y = (len[m])-1
    while x in range(y):
        sublist = []
        sublist = sublist + m[x:y]
        newlist.append(sublist)
        x += 1
    return new list

当我尝试通过输入类似

的内容来运行该功能时
a = [3,4,2,-9,7,6,1]
h(a)

我收到错误:

Traceback (most recent call last):
File "<pyshell#239>", line 1, in <module>
h(a)
File "<pyshell#238>", line 4, in h
y = (len[m])-1
TypeError: 'builtin_function_or_method' object has no attribute '__getitem__'

我对这段代码的目的只是创建一个后缀列表,而不是按长度排序。在我弄清楚如何创建这个新列表后,我将添加代码的排序位。请记住,这不是家庭作业。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:3)

可能的解决方案是使用列表理解:

[l[i:] for i in range(len(l), -1, -1)]

此代码使用切片和列表推导来简单地从末尾返回切片列表。使用你的代码,需要进行小的修改 - len是一个函数而不是字典,因此你需要使用call operator()而不是下标operator []。

y = len(m) - 1

但这不会产生正确的结果,因为你不会得到最后一个后缀和空后缀。为了覆盖这两个,你需要修改y或循环来覆盖它们

y = len(m) + 1

或更好

while x in range(y + 1):

答案 1 :(得分:0)

使用括号来获取列表的长度:

y = len(m) - 1

答案 2 :(得分:0)

您的错误出现在len

(len[m]) - 1

len是一个函数,您无法索引或切片,也可以不切换。这样做:

y = len(m) - 1

还有一个错误:

return new list

应该是:(你不能在变量中有空格)

return newlist