# 🐍 Python - *Slices*

*Slices*

Updated at 2018-06-09 14:50

```
from typing import List
numbers: List[int] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# index = 0 1 2 3 4 5 6 7 8
assert numbers[:2] == [1, 2] # first two
assert numbers[2:] == [3, 4, 5, 6, 7, 8, 9] # everything after first two
assert numbers[-2:] == [8, 9] # last two
assert numbers[:-2] == [1, 2, 3, 4, 5, 6, 7] # everything but the last two
assert numbers[1:3] == [2, 3] # everything between index 1 and 3
assert numbers[::2] == [1, 3, 5, 7, 9] # every second item
assert numbers[::-1] == [9, 8, 7, 6, 5, 4, 3, 2, 1] # reverse the order
# BAD old way to clear a list:
assert numbers[:] == [1, 2, 3, 4, 5, 6, 7, 8, 9] # returns all items
del numbers[:]
assert numbers == []
# modern Python should use numbers.clear()
```

`[a:b:c]`

is just syntactical sugar for `slice(a, b, c)`

.

```
from typing import List
letters: List[str] = ['a', 'b', 'c']
assert letters[slice(None, None, -1)] == ['c', 'b', 'a']
```

**You can assign to slice to modify the original list.**

```
from typing import List
numbers: List[int] = [1, 2, 3, 4]
assert numbers[1:3] == [2, 3]
numbers[1:3] = [5, 6]
assert numbers == [1, 5, 6, 4]
```

# Source

- Python Tricks The Book, Dan Bader
- Fluent Python, Luciano Ramalho