我对计算机科学比较陌生,而且我正在学习如何用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__'
我对这段代码的目的只是创建一个后缀列表,而不是按长度排序。在我弄清楚如何创建这个新列表后,我将添加代码的排序位。请记住,这不是家庭作业。任何帮助将不胜感激!
答案 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