after4-简单python任务(索引和列表问题)

after4-简单python任务(索引和列表问题),python,Python,这是我第一次问关于堆栈溢出的问题。在我学习Python2.7的过程中,它对我来说非常有价值 问题如下: 给定整数的非空列表numlist,在4之后编写一个函数(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]" 我认为这

这是我第一次问关于堆栈溢出的问题。在我学习Python2.7的过程中,它对我来说非常有价值

问题如下: 给定整数的非空列表numlist,在4之后编写一个函数(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:]”的最后一行)


提前感谢。

您将名称
x
用于两个不同的目的:作为函数
after4()
的列表参数,以及作为变量
索引的列表理解中的整数

解释器认为您指的是最后一行中的整数,但您指的是列表参数。将其中一个名称更改为另一个名称,然后看看会发生什么


从现在起,您应该使用更多描述性变量名。例如,不要对list参数使用
x
,而是使用类似number\u list的内容,这样可以清楚地知道它是什么。为数学参数(如math.sin(x))和列表理解保留短名称,如
x

对不起,以前的实现是错误的。这是正确的:)

在方法
索引(x,y)
中:

x-搜索元素(这里是4)


y-index from我们希望开始搜索,如果跳过此参数,它将从索引0开始。

错误仍然存在,我将functions参数更改为numlist,并在index行中更改了它。还有其他的建议吗?是的,确实有。请原谅我的无知,但我是否按照你的建议改变了它,还是我误解了它?谢谢你,它工作得很好,这是一种不同于我所设想的方法,但在这方面效率更高。谢谢你again@GarvanDoyle我的荣幸:)嘿,你介意简单解释一下“start=x.index(4,n-1)”是如何工作的吗。我理解list.index(obj)的工作原理,但我不确定添加逗号和另一个变量时会发生什么。@GarvanDoyle很抱歉,以前的实现是错误的,这个是正确的。我弄错了index()函数的第二个参数。谢谢,这样做更有意义
index=[I代表I,j在枚举(x)中,如果j==4]
编辑这个,它应该可以工作。
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:]