List là cấu trúc dữ liệu quan trọng, xoay list là thao tác phổ biến. Có nhiều cách thực hiện với ưu/nhược điểm khác nhau.
1. Sử dụng slicing (cắt lát)
test_list = [1, 4, 6, 7, 2] # Trái 3: test_list[3:] + test_list[:3] → [7, 2, 1, 4, 6] # Phải 3: test_list[-3:] + test_list[:-3] → [1, 4, 6, 7, 2]
2. Sử dụng list comprehension
n = len(test_list) # Trái k: [test_list[(i + k) % n] for i in range(n)] # Phải k: [test_list[(i - k) % n] for i in range(n)]
3. Sử dụng collections.deque.rotate()
from collections import deque d = deque(test_list) d.rotate(-3) # Trái 3 d.rotate(3) # Phải 3 list(d)
So sánh
- Slicing: Ngắn gọn, dễ đọc, tạo list mới. Tốt cho list nhỏ/vừa.
- List comprehension: Linh hoạt, không cần import, nhưng chậm hơn slicing.
- deque.rotate(): Hiệu quả O(1) cho xoay, phù hợp xoay nhiều lần liên tiếp. Cần convert list↔deque.
Kết quả mẫu
Original: [1, 4, 6, 7, 2] Left rotate 3: [7, 2, 1, 4, 6] Right rotate 3: [1, 4, 6, 7, 2]