这是我第一次询问有关堆栈溢出的问题。在我学习python 2.7时,它对我来说真的很有价值。
问题如下:
"给定一个非空的列表numlist of int,写一个函数after4(numlist),它返回一个新的列表,其中包含原始numlist中原始numlist中最后4个之后的元素。 numlist将包含至少一个4.
after4([2, 4, 1, 2]) → [1, 2]
after4([4, 1, 4, 2]) → [2]
after4([4, 4, 1, 2, 3]) → [1, 2, 3]"
我认为这个问题相当简单,但我似乎可以将代码正确地放在我脑海中的计划中。
def after4(numlist):
"""
Given a list of numbers, will print all numbers after the last 4
:param x: list - list of numbers including the 4
:return: list - New list of all numbers after the last 4
"""
indices = [i for i, x in enumerate(numlist) if x == 4]
index = max(indices)
print x[index:]
但我一直收到这个错误,我不确定如何解决这个问题。 ' INT'对象没有属性' getitem'" (错误在代码的最后一行" print x [index:]")
提前谢谢。
答案 0 :(得分:1)
您将名称x
用于两个不同的目的:作为函数after4()
的list参数,以及变量indices
的列表解析中的整数。
解释器认为你的意思是最后一行中的整数,但你的意思是列表参数一。将其中一个名称更改为其他名称,看看会发生什么。
从现在开始,您应该使用更多描述性变量名称。例如,不要使用x
作为list参数,而是使用number_list之类的东西,这样可以清楚地知道它是什么。对于数学参数(例如math.sin(x))和列表推导,请保留x
等短名称。
答案 1 :(得分:0)
抱歉,以前的实施错了。这是正确的:)
def after4(x):
rev = list(reversed(x)) #rev = it's reversed list
start = len(x) - rev.index(4) #start = it's index of last 4, len(x) - length of list
print x[start:]
方法index(x, y)
:
x - 搜索元素(这里是4)
y - 我们想要开始搜索的索引,如果我们跳过这个参数,它从索引0开始。