🐍 Python - 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