Xác định các dãy con liên tiếp có giá trị giống nhau trong danh sách, trả về tuple (giá trị, chỉ số bắt đầu, chỉ số kết thúc). Sử dụng vòng lặp while lồng.
Mã nguồn
my_list = [12, 23, 23, 23, 48, 48, 36, 17, 17]
print("Danh sách:", my_list)
my_result = []
index = 0
while index < len(my_list):
start_position = index
val = my_list[index]
# Tìm cuối dãy giá trị giống nhau
while index < len(my_list) and my_list[index] == val:
index += 1
end_position = index - 1
my_result.append((val, start_position, end_position))
print("Kết quả:", my_result)
Kết quả
Danh sách: [12, 23, 23, 23, 48, 48, 36, 17, 17] Kết quả: [(12, 0, 0), (23, 1, 3), (48, 4, 5), (36, 6, 6), (17, 7, 8)]
Giải thích
- Vòng lặp ngoài điều khiển
indexnhảy qua các nhóm. - Vòng lặp trong tăng
indexmiễn là giá trị bằngval. - Khi thoát vòng trong:
end_position = index - 1(chỉ số cuối cùng của nhóm). - Append tuple
(giá_trị, bắt_đầu, kết_thúc).
Ứng dụng
Nén dữ liệu (Run-Length Encoding), phát hiện đoạn đồng nhất, xử lý tín hiệu.
Cách khác: itertools.groupby
from itertools import groupby
result = [(k, sum(1 for _ in g)) for k, g in groupby(my_list)]
# Cần tính index riêng nếu cần vị trí