๐น 0. Slice notation ([::-1]
)
my_list = [1, 2, 3, 4]
rev = my_list[::-1]
print(rev) # [4, 3, 2, 1]
- Creates a new reversed copy.
- Time: O(n)
- Space: O(n)
๐น 1. In-place reverse (mutates the list)
my_list = [1, 2, 3, 4]
my_list.reverse()
print(my_list) # [4, 3, 2, 1]
- Time: O(n)
- Space: O(1) (does not create a copy)
- Best when you donโt need the original ordering preserved.
๐น 2. Using reversed()
(iterator)
my_list = [1, 2, 3, 4]
rev_iter = reversed(my_list) # returns iterator
print(list(rev_iter)) # [4, 3, 2, 1]
- Time: O(1) to create the iterator, O(n) when iterating.
- Space: O(1) (iterator doesnโt copy).
- Use this when you just need to iterate in reverse order, not store a new list.
๐น 3. Manual loop
my_list = [1, 2, 3, 4]
reversed_list = []
for i in range(len(my_list)-1, -1, -1):
reversed_list.append(my_list[i])
print(reversed_list) # [4, 3, 2, 1]
- Educational, but not Pythonic.
๐น 4. Using sorted()
with reverse=True
my_list = [1, 2, 3, 4]
rev = sorted(my_list, reverse=True)
print(rev) # [4, 3, 2, 1]
- โ ๏ธ Careful: this doesnโt just reverse, it sorts descending.
- Only correct if list is already sorted ascending.
๐น 5. Stack trick (pop repeatedly)
my_list = [1, 2, 3, 4]
reversed_list = [my_list.pop() for _ in range(len(my_list))]
print(reversed_list) # [4, 3, 2, 1]
- Works but destroys the original list.
โ
Summary
Method | Returns copy? | In-place? | Space | Time |
---|
[::-1] | โ
Yes | โ No | O(n) | O(n) |
.reverse() | โ No | โ
Yes | O(1) | O(n) |
reversed() | Iterator only | โ No | O(1) | O(n) when consumed |
Manual loop | โ
Yes | โ No | O(n) | O(n) |
sorted(..., True) | โ
Yes | โ No | O(n) | O(n log n) |