# Remove Middle Challenge

I am trying to complete the following challenge:
Create a function named `remove_middle` which has three parameters named `lst` , `start` , and `end` .

The function should return a list where all elements in `lst` with an index between `start` and `end` (inclusive) have been removed.

For example, the following code should return `[4, 23, 42]` because elements at indices `1` , `2` , and `3` have been removed:
remove_middle([4, 8 , 15, 16, 23, 42], 1, 3)

Now I understand the solution given but I wanted to try and do my own solution using a while loop and this is the code I have.

def remove_middle(lst,start,end):

i = start

while i <= end:

``````lst.pop(i)

i += 1
``````

return lst

print(remove_middle([0,1,2,3,4,5,6,7],2,4))

When I try the code out it return [0,1,4,6] but it should return [0,1,5,6,7] any help would be appreciated.

Removing from a list you are looping over is tricky business, lets say you have the following list:

``````a   b   c # values in the list
0   1   2 # indexes
``````

and you remove the first element, you end up:

``````_   b   c
0   1   2
``````

where the underscore represents the absence of a value. Except that the list can’t exists in this state, so everything shifts to the left:

``````b   c
0   1
``````

this combined with a loop is problematic. You increase `i`, but you skip an element because of the shift that occurs

there are possible solutions like looping in reverse. But list slicing would be much better here 1 Like

removing values in a list youre looping through is very error prone so a for loop would definitely be better or have a look at list splices for example:

start_ind = lst.index(start)
end_ind = lst.index(end) + 1

return lst[:start_ind] + lst[end_ind]

why use `.index()`? you are already given the indexes, you don’t need the values from the list to use them as indexes