Slicing Deep Dive
Slicing is one of the most useful syntax features in Python and one worth getting familiar with early. It can not only extract subsequences but also reverse, step, and shallow-copy. Many patterns become very natural once you write them enough.
Basic Syntax
sequence[start:stop:step]
start: Start position, inclusivestop: End position, exclusivestep: Step size
Most Common Patterns
nums = [0, 1, 2, 3, 4, 5]
print(nums[1:4]) # [1, 2, 3]
print(nums[:3]) # [0, 1, 2]
print(nums[3:]) # [3, 4, 5]
print(nums[::2]) # [0, 2, 4]
print(nums[::-1]) # [5, 4, 3, 2, 1, 0]
Negative Indexing
text = "abcdef"
print(text[-1]) # f
print(text[-3:]) # def
Negative indexing counts from the end, making it great for handling "the last few elements".
Slicing can not only read, but also modify
nums = [0, 1, 2, 3, 4, 5]
nums[1:4] = [10, 20, 30]
print(nums)
You can also delete a segment:
del nums[2:4]
Common Uses
1. Shallow copy a list
copied = nums[:]
2. Reverse a sequence
reversed_text = text[::-1]
3. Take every k-th element
evens = nums[::2]
An easily overlooked point
Slices usually return new objects, but whether they're "completely independent" depends on whether the elements in the sequence themselves are mutable. For more specific examples, see:
My quick-reference shorthand
[:n]: Firstnelements[n:]: Fromnto the end[-n:]: Lastnelements[::k]: Every k-th element[::-1]: Reverse