while循环中的列表值始终超出范围

时间:2019-09-09 17:30:49

标签: python while-loop index-error

我正在尝试将列表中的重叠间隔组合在一起,以创建一个仅包含不重叠间隔的较小列表。但是,我一直在获取IndexError:if语句的列表索引超出范围。

我已经尝试过使用for循环,但这似乎是倒退了一步,因为for循环语句中列表的长度是静态的。

list = [(13,15),(-1,16),(12,17),(-5,-2),(2,5)]
x = 0
while x < len(list):
    if list[x][0] < list[x+1][0] and list[x][1] > list[x+1][1]:
        del list[x+1]
    if list[x][0] > list[x+1][0] and list[x][1] > list[x+1][1]:
        tuple2 = (list[x+1][0], list[x][1])
        list.append(tuple2)
        del list[x]
        del list[x+1]
    if list[x][0] < list[x+1][0] and list[x][1] < list[x+1][1]:
        tuple2 = (list[x][0], list[x+1][1])
        list.append(tuple2)
        del list[x]
        del list[x+1]
    x = x + 1

print(list)

预期输出为:[(-5,-2),(-1,17)]

2 个答案:

答案 0 :(得分:0)

假设您坚持使用变量名list(应更改),则只能迭代到list-1的长度,因为您要在循环内使用x+1来对其进行处理:

x = 0
while x < (len(list)-1):
    if list[x][0] < list[x+1][0] and list[x][1] > list[x+1][1]:
        del list[x+1]
    if list[x][0] > list[x+1][0] and list[x][1] > list[x+1][1]:
        tuple2 = (list[x+1][0], list[x][1])
        list.append(tuple2)
        del list[x]
        del list[x+1]
    if list[x][0] < list[x+1][0] and list[x][1] < list[x+1][1]:
        tuple2 = (list[x][0], list[x+1][1])
        list.append(tuple2)
        del list[x]
        del list[x+1]
    x = x + 1

print(list)

答案 1 :(得分:0)

直到x < len(list),您才能运行此代码。它必须为x < len(list) - 1

list = [(13,15),(-1,16),(12,17),(-5,-2),(2,5)]
x = 0
while x < len(list) -1 :
    print(x)
    if list[x][0] < list[x+1][0] and list[x][1] > list[x+1][1]:
        del list[x+1]
    if list[x][0] > list[x+1][0] and list[x][1] > list[x+1][1]:
        tuple2 = (list[x+1][0], list[x][1])
        list.append(tuple2)
        del list[x]
        del list[x+1]
    if list[x][0] < list[x+1][0] and list[x][1] < list[x+1][1]:
        tuple2 = (list[x][0], list[x+1][1])
        list.append(tuple2)
        del list[x]
        del list[x+1]
    x = x + 1

print(list)