首先,我使用python 2天并且有更多问题。 从他们下面一个。
我有一个清单(3297项),我希望从结束找到第一项的索引值!='nan'
示例:(索引,值)
[0] 378.966
[1] 378.967
[2] 378.966
[3] 378.967
....
....
[3295] 777.436
[3296] nan
[3297] nan
如果想找到带索引的项目 - 3295
我的代码(从头到尾,一步一步)
i = len(lasarr); #3297
while (i >= 0):
if not math.isnan(lasarr[i]):
method_end=i # i found !
break # than exit from loop
i=i-1 # next iteration
运行并获取错误
Traceback (most recent call last): File "./demo.py", line 37, in <module> if not math.isnan(lasarr[i]): IndexError: index out of bounds
我做错了什么?
答案 0 :(得分:2)
你开始超越列表中的最后一项。考虑
>>> l = ["a", "b", "c"]
>>> len(l)
3
>>> l[2]
'c'
列表索引从0
开始编号,因此l[3]
会引发IndexError
。
i = len(lasarr)-1
解决了这个问题。
答案 1 :(得分:2)
您的代码是IndexError
吗?它应该;-) lasarr
有3297项,lasarr[0]
到lasarr[3296]
包含。 lasarr[3297]
不是列表的一部分:这是位于列表末尾之外的位置。这样开始你的代码:
i = len(lasarr) - 1
然后i
将索引列表的最后一个元素。
答案 2 :(得分:0)
你从错误的位置开始,数组从0
开始索引,所以i = len(lasarr) -1
的位置不正确。
lasarr = [378.966, 378.967, 378.968, 378.969, nan]
for i in range(len(lasarr) - 1, -1,-1):
if not math.isnan(lasarr[i]):
break
答案 3 :(得分:-1)
由于您的列表很短,只需过滤它并取最后一项(及其索引):
l = ['a', 'b', 'nan', 'c', 'nan']
lastindex = [x for x in enumerate (l) if x [1] != 'nan'] [-1] [0]
print (lastindex)