上述代码只能找到右侧最接近的在列表A的元素,无法找到左侧最接近的在列表A的元素,如何改进代码,使它既能找到右侧最接近的在列表A的元素,又能找到左侧最接近的在列表A的元素?
时间: 2024-09-29 10:05:23 浏览: 27
js代码-16. 3Sum Closest
为了改进代码以同时找到左右两侧的最近元素,你可以稍微修改一下`find_neighbors`函数。这里是一个更新后的版本:
```python
def find_neighbors(A, B):
A_set = set(A) # 将列表A转换为集合,便于快速查找
neighbors_dict = {item: None for item in B} # 初始化邻居字典,所有项默认为None
# 遍历B并更新左、右邻居
for i, item in enumerate(B):
if item in A_set: # 如果元素在A中,不需要找邻居
continue
left_index = i - 1
right_index = i + 1
# 查找左侧邻居
while left_index >= 0 and B[left_index] not in A_set:
left_index -= 1
if left_index >= 0:
neighbors_dict[item] = (left_index, B[left_index])
# 查找右侧邻居
while right_index < len(B) and B[right_index] not in A_set:
right_index += 1
if right_index < len(B):
if neighbors_dict[item][0] is None or B[right_index] > neighbors_dict[item][1]: # 更新右侧更近的邻居
neighbors_dict[item] = (right_index, B[right_index])
return neighbors_dict
# 使用新函数并打印结果
list_A = ['PIKAS', 'UNTAN', 'MADUK', 'LEGIV', 'VILID', 'ADGOL', 'IKUBA', 'XSH', 'WTM', 'YIH', 'ENH', 'LOTMO', 'SAKPU']
list_B = ['PIKAS', 'UNTAN', 'PIMOL', 'AGPUX', 'NOBEM', 'VEMEX', 'SUNBO', 'HFE', 'UXALO', 'P344', 'MIDOX', 'BIVIP', 'SAGUD', 'WHA', 'WTM', 'YIH', 'ENH', 'LOTMO', 'SAKPU']
result = find_neighbors(list_A, list_B)
print(result)
```
现在,`neighbors_dict` 中的每个元素都有一个元组作为值,包含左侧和右侧的邻居(如果存在)。第一个元素是左侧邻居的索引,第二个元素是右侧邻居。如果没有找到相应的邻居,它们将保持为 `None`。
阅读全文