Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Python – Trích xuất phạm vi các phần tử liên tiếp giống nhau từ danh sách

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 index nhảy qua các nhóm.
  • Vòng lặp trong tăng index miễn là giá trị bằng val.
  • 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í