我正在尝试将列表中的重叠间隔组合在一起,以创建一个仅包含不重叠间隔的较小列表。但是,我一直在获取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)]
答案 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)