+ 1
List slicing
list = [0, 1, 2, 3, 4, 5] print(list[4:2:1]) print(list[-2:2:1]) print(list[2:4:-1]) print(list[4:4:-1]) Please explain why all of these print an empty list
2 ответов
+ 2
First, lets have a closer look at this expression x:y:z, and understand which component stands for.
x is the start
y is finish which is not included(it means that there will be no element with 'y' index in resulting list)
z is the step to walk from x to y.
Both x and y may be positive or negative: imagine we have list [0,1,2,3,4,5]. How to understand which element has index -1? Write your list twice and start with second copy: '0' in second copy has 0 index, go left - here is '5' from first copy, decreasing '0' index by one makes it -1 for '5'.
[0, 1, 2, 3, 4, 5][0, 1, 2, 3, 4, 5]
-6 -5 -4 -3 -2 -1 0 1 2 3 4 5
z may also be negative or positive. Negative means that you need to go down from 'x' to 'y'. Positive - up from 'x' to 'y'. In first case we need x + z > y for non empty list in the result, as x + z < y in second case.
Considering your questions:
1. 4:2:1. x=4, y=2, z = 1, z > 0 so we need x+z < y, which is 4+1 < 2 for non empty list. This statement is false and list is empty
2. -2:2:1. '-2' index is the same as '4' for our list, so it is case 1. and empty list again.
3. 2:4:-1. x =2, y=4, z= -1. z < 0, lets have a look if x + z > y is true: (2 + -1 > 4) is false so list is empty.
4. 4:4:-1. z < 0, (4 + -1 > 4) is false, again empty list
0
Thanks! That was very helpful.