问题描述
我正在尝试编写一个函数,以删除列表中的否定元素。但是不明白为什么python解释器会显示indexerror(列表索引超出范围)。
lst=[-1,2,-4,12]
def fun(lst):
s=[]
for i in range(0,len(lst)):
if 0<lst[i]:
s.append(i)
lst=s
return print(lst)
print(fun(lst))
解决方法
在for循环的最后一行中,您执行了“ lst = s”。现在,此行将删除整个lst列表,并使其成为列表s的别名。因此,循环超出索引范围。删除最后一行应该可以解决您的问题。
现在使用return函数,只需返回s列表而不是lst。
lst=[-1,2,-4,12]
def fun(lst):
s=[]
for i in range(0,len(lst)):
if 0<lst[i]:
s.append(i)
return print(s)
print(fun(lst))
此外,您可以改进代码,例如
lst=[-1,12]
def fun(lst):
s=[]
for i in lst:
if i >= 0:
s.append(i)
return(print(s))
print(fun(lst))
,
您的缩进错误。 lst=s
应该在for循环之后完成。
lst=[-1,len(lst)):
if 0<lst[i]:
s.append(i)
lst=s
return print(lst)
print(fun(lst))
应该更好,但是不好。
第二个问题是您附加了i
而不是lst[i]
。
工作代码:
lst=[-1,len(lst)):
if 0<lst[i]:
s.append(lst[i])
lst=s
return print(lst)
print(fun(lst))
第二种解决方案是更改“ for”循环:
lst=[-1,12]
def fun(lst):
s=[]
for i in lst:
if 0 < i:
s.append(i)
lst=s
return print(lst)
print(fun(lst))