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