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

时间:2016-05-10 16:34:24

标签: python

这是我第一次询问有关堆栈溢出的问题。在我学习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:]")

提前谢谢。

2 个答案:

答案 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开始。