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

Python – Tìm xuất hiện gần nhất giữa hai phần tử trong danh sách

Tìm chỉ số của phần tử x gần nhất với phần tử y trong danh sách. Trả về chỉ số của x gần y nhất. Sử dụng list comprehension và tính khoảng cách tuyệt đối.

Mã nguồn


def nearest_occurrence_list(my_list, x, y):
    if x not in my_list or y not in my_list:
        return -1
    
    # Tất cả chỉ số của x
    x_indices = [i for i in range(len(my_list)) if my_list[i] == x]
    # Chỉ số đầu tiên của y
    y_index = my_list.index(y)
    
    min_dist = float('inf')
    result = None
    for idx in x_indices:
        dist = abs(idx - y_index)
        if dist < min_dist:
            min_dist = dist
            result = idx
    return result

my_list = [12, 24, 15, 17, 28, 26, 13, 28, 14, 12, 20, 19, 24, 29, 14]
print("Danh sách:", my_list)

x = 14
y = 26
print("x =", x, ", y =", y)

print("Chỉ số x gần y nhất:", nearest_occurrence_list(my_list, x, y))

Kết quả

Danh sách: [12, 24, 15, 17, 28, 26, 13, 28, 14, 12, 20, 19, 24, 29, 14]
x = 14 , y = 26
Chỉ số x gần y nhất: 8

Giải thích

  • y=26 tại index 5.
  • x=14 xuất hiện tại index 8 và 14.
  • Khoảng cách: |8-5|=3, |14-5|=9 → index 8 gần hơn.
  • Hàm trả về index của x (8), không phải khoảng cách.

Cải tiến

  • Dùng float('inf') thay vì số lớn tùy ý.
  • Xử lý trường hợp x hoặc y không có trong list (trả về -1 hoặc None).
  • Nếu y xuất hiện nhiều lần, code chỉ dùng index(y) (lần đầu). Có thể mở rộng tìm cặp (x_idx, y_idx) gần nhất tuyệt đối.