[英]IndexError: list index out of range error for python split function
[英]IndexError: list index out of range in Python for function
我尝试在此站点上查找,但我找不到我的程序到底出了什么问题。 它一直到13或data_list [25],但随后吐出该IndexError消息。
def rlEncode(n, z, data_list):
while data_list[n] == data_list[n+1]:
z = z + 1
n = n + 1
while data_list[n] != data_list[n+1]:
return (n, z)
def unitTest( ):
counter = 0
n = 0
z = 1
data_list = [1,1,1,1,1,3,3,5,5,5,5,5,5,6,8,8,1,1,1,5,5,5,5,13,14, 14]
compress_list = [ ]
while counter < len(data_list):
rlEncode(n, z, data_list)
x, y = rlEncode(n, z, data_list)
compress = [data_list[x], y]
counter = counter + 1
compress_list = compress_list + compress
n = x+1
z = 1
continue
print("list: ", data_list)
print("compressed: ", compress_list)
在rlEncode
函数中,您在将n
增加得太高之后检查while
条件:
def rlEncode(n, z, data_list):
while data_list[n] == data_list[n+1]:
z = z + 1
n = n + 1
第一次检查data_list[n] == data_list[n + 1]
问题……但是接着您执行n = n + 1
,然后返回以检查while
条件。 此时,如果n
为25,由于data_list[25 + 1]
不存在, data_list[n + 1]
将给您一个索引错误。
您可以通过在n = n + 1
之后添加类似print(n, len(data_list))
的打印行来进行检查。
因此,请确保仅从0到24进行迭代,或者确保执行以下操作:
if n == len(data_list) - 1:
break
在执行算法中任何位置的list[n + 1]
类的操作时,始终必须牢记数组的上限。
剧透:以下解决方案:
为了使您的代码正常工作,我进行了两项更改:
def rlEncode(n, z, data_list):
# Make sure we don't overrun our list length:
while n < len(data_list) - 1 and data_list[n] == data_list[n + 1]:
z += 1
n += 1
return (n, z)
def unitTest( ):
counter = 0
n = 0
z = 1
data_list = [1,1,1,1,1,3,3,5,5,5,5,5,5,6,8,8,1,1,1,5,5,5,5,13,14,14]
compress_list = []
while n < len(data_list) - 1: # Use n here, not counter
rlEncode(n, z, data_list)
x, y = rlEncode(n, z, data_list)
compress = [data_list[x], y]
counter = counter + 1
compress_list = compress_list + compress
n = x + 1
z = 1
print("list: ", data_list)
print("compressed: ", compress_list)
unitTest()
('list: ', [1,1,1,1,1, 3,3, 5,5,5,5,5,5, 6, 8,8, 1,1,1, 5,5,5,5, 13, 14,14])
('compressed: ', [1,5, 3,2, 5,6, 6,1, 8,2, 1,3, 5,4, 13,1, 14,2])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.