此代码有什么问题?
def remove_middle(lst, start, end):
for i in range(start, end+1):
del lst[i]
return lst
它应该删除在开始和结束(包括)之间的索引中放置的所有元素。在下面的示例中,它应该返回[4, 23, 42]
,但是当我运行代码时,我得到的是[4, 15, 23]
。
print(remove_middle([4, 8, 15, 16, 23, 42], 1, 3))
答案 0 :(得分:-1)
每次删除值时,列表都会更改大小,并且您正在使用索引来删除值。 for
循环在每次迭代中相继应用逻辑,而不是同时应用。
相反,您可以将enumerate
用于列表理解:
def remove_middle(lst, start, end):
return [val for idx, val in enumerate(lst) if idx not in range(start, end+1)]
How to remove items from a list while iterating?
涵盖了更一般的情况但是,在这种特定情况下,您可以使用列表切片:
def remove_middle(lst, start, end):
return lst[:start] + lst[end+1:]