Cắt dải (slicing) là kỹ thuật phổ biến để phân tích dữ liệu từ danh sách trong Python. Nhưng đôi khi ta cần tạo các dải cắt cho một phạm vi giá trị cụ thể. Ví dụ: in 4 phần tử bằng cách bỏ qua mỗi 4 phần tử từ danh sách. Bài viết này trình bày khái niệm cắt dải phạm vi trong Python.
Sử dụng range() và len()
Tạo vòng lặp for duyệt toàn bộ độ dài danh sách nhưng chỉ chọn các phần tử thỏa mãn kiểm tra chia hết. Kiểm tra giá trị phần dư của phần tử thứ k. Nếu phần dư lớn hơn hoặc bằng giá trị phạm vi, chấp nhận phần tử, ngược lại bỏ qua.
Ví dụ
range_slicing = [6, 9, 11, 15, 20, 24, 29, 36, 39, 43, 47, 52, 56, 70, 73, 79]
print("The given list: ", range_slicing)
# Giá trị phạm vi
s = 4
# Dùng range và len
result = [range_slicing[k] for k in range(len(range_slicing)) if k % (s * 2) >= s]
print("\nThe list after range slicing: ", result)
Kết quả:
The given list: [6, 9, 11, 15, 20, 24, 29, 36, 39, 43, 47, 52, 56, 70, 73, 79] The list after range slicing: [20, 24, 29, 36, 56, 70, 73, 79]
Sử dụng enumerate
Áp dụng logic tương tự nhưng thay vì range() và len() ta dùng enumerate(). Lưu ý phần tử cuối cùng xuất hiện trong kết quả vì nó thỏa mãn điều kiện chia hết.
Ví dụ
range_slicing = [6, 9, 11, 15, 20, 24, 29, 36, 39, 43, 47, 52, 56, 70, 73, 79]
print("The given list: ", range_slicing)
# Giá trị phạm vi
s2 = 5
# Dùng enumerate
result_2 = [val for m, val in enumerate(range_slicing) if m % (s2 * 2) >= s2]
print("\nThe list after range slicing: ", result_2)
Kết quả:
The given list: [6, 9, 11, 15, 20, 24, 29, 36, 39, 43, 47, 52, 56, 70, 73, 79] The list after range slicing: [24, 29, 36, 39, 43, 79]