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.