...
def splitMunipulation(p,threshold=5000):
runs=[];i=0
while i<len(p):
l=[];i+=1
print i,p[i]
while p[i]!=press(0,1,0):
l.append(p[i]);i+=1
else:
runs.append(l)#here i points to another (0,1,0)
return runs
...
record=splitMunipulation(record)
'''
输出:
1 <__main__.press instance at 0x046690A8>
File "H:\mutate.py", line 28, in splitMunipulation
while p[i]!=press(0,1,0):
IndexError: list index out of range
press
是一个类
并且由于print p[i]
运作良好,为什么p[i]
被视为超出范围?
真的不知道发生了什么
'''
答案 0 :(得分:3)
所以,有些事情......
首先,你的代码非常...... unpythonic。这不是C,因此您不需要使用while
循环进行迭代,也不要使用分号在Python中的一行上分隔多个命令。永远。此外,while
... else
格式令人困惑,应该避免使用。
如果你查看while
循环的前几行'
while i<len(p):
l=[];i+=1
您将i
保持在p
的长度以下,但您会立即将i
的值增加一。因此,在i=len(p) - 1
时,您会i
一个更大,len(p)
。因此,当您尝试访问p[i]
时,您正在尝试访问不存在的值。
解决这些问题,你会得到:
...
def splitMunipulation(p,threshold=5000):
runs=[]
for i in p:
l=[]
print i
if i != press(0,1,0):
runs.append(i)
return runs
...
record=splitMunipulation(record)
答案 1 :(得分:2)
while p[i]!=press(0,1,0):
l.append(p[i]);i+=1
变量i
在此循环中递增,直到p[i]!=press(0,1,0)
。由于没有任何事情可以使p
更长,或者为了测试我不大于p的长度,因此很容易看出索引如何超出范围。
答案 2 :(得分:0)
len返回长度,而不是最后一个索引。如果l = [1,2,3],则len(l)返回3,但l [3]超出范围。
所以你应该使用
while i<len(p)-1
或更好:
for i in range(len(p)):