# Removing from List

As per below scenario and solution, I don’t understand the following code:
return lst[:start] + lst[end+1:]
how does this return [4, 23, 42]

Scenario:
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)

Solution:
def remove_middle(lst, start, end):
return lst[:start] + lst[end+1:]
print(remove_middle([4, 8, 15, 16, 23, 42], 1, 3))

My apology, I forgot.

Here is more details:
Topic: 2. Remove Middle
From: Advanced Python Code Challenges: Lists
Difficult Python Code Challenges involving Lists

1 Like

Is that your solution, or the one given as the Solution?

Given solution.
Thanks

Have you learned about list and string slicing, yet?

Yes. I’m well aware.
I just cant wrap my head around this slicing:
return lst[:start] + lst[end+1:]
This was not taught in the exercise or maybe I did not grasp it.

Looking at the list, and the indices,

`````` 0  1   2   3   4   5
[4, 8, 15, 16, 23, 42]
1   2   3          <= to be removed
``````

Since `end` is `3`, we need to to add 1 for the first element in the right side of the returned list.

Consider this rather verbose demonstration that does not use slicing, but instead uses `enumerate()`,

``````return [x for i, x in enumerate(a) if i not in range(1, 4)]
``````

List slicing works similar to range in that the last index is excluded.

Here’s another take of the slice approach…

``a[start:end+1] = []``

Hope this not a dumb question.
As per these parameters:
def remove_middle(lst, start, end):

remove_middle([4, 8 , 15, 16, 23, 42], 1, 3)

Does it mean that
start = 8 (1st index of the above list)
end = 16 (3rd index of the above list)

Yes, since the instructions specify to include the end index in the removed elements.

``````lst[:start]
``````

Because a slice works like `range()`, the value at index 1 is not included in that slice.

``````lst[end+1:]
``````

Because `end` is not to be included in the returned list, we must add 1.

1 Like

I’m having the same issue as this wasn’t covered in the exercises.

I looked up the exercises TWICE. This solution was NOT covered in the exercises.
What is the point of the challenge if we are not equipped to solve it?

Hey there @stanmarsh01 Welcome to the Codecademy forums!

As long as you had learned about list indexing and functions, than the course has given you what you need to solve the lesson.

I believe the point of the challenge is so you can learn to experiment with your ‘tools’. You will gain experiance with it and better problem solving skills. A program developer is only told what is needed, not how to get there. It is up to the programmer to solve this.