You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取列表中唯一元素对应的最邻近索引值?

解决方法

先理清楚逻辑

第一步得把每个元素对应的所有索引归到一起,比如A对应[0,15,20],B对应[2,16],C对应[7,17]。然后对每个元素的索引,找出哪个索引离其他元素的索引最近——也就是这个索引和其他元素的所有索引之间的最小距离是最小的,这个索引就是我们要的。

代码实现(Python)

from collections import defaultdict

items = ['A', 'A', 'A', 'B', 'B', 'C', 'C']
index = [0, 15, 20, 2, 16, 7, 17]

# 按元素分组,把每个元素对应的索引都攒起来
element_indices = defaultdict(list)
for item, idx in zip(items, index):
    element_indices[item].append(idx)

all_indices = set(index)
result = {}

for elem, indices in element_indices.items():
    # 只保留其他元素的索引,排除当前元素自己的
    other_indices = all_indices - set(indices)
    best_idx = None
    smallest_min_dist = float('inf')
    for idx in indices:
        # 计算当前索引到其他元素索引的最近距离
        current_min_dist = min(abs(idx - other_idx) for other_idx in other_indices)
        if current_min_dist < smallest_min_dist:
            smallest_min_dist = current_min_dist
            best_idx = idx
    result[elem] = best_idx

# 按A、B、C的顺序输出结果
print([result['A'], result['B'], result['C']])  # 输出: [15, 16, 17]

为啥这么写?

  • 分组的时候用defaultdict最方便,不用手动判断元素是否已经在字典里。
  • 计算距离的时候,只看当前元素之外的索引,这样能准确找到“离其他元素最近”的那个索引:
    • A的三个索引里,15离B的16最近(距离1),比0离B的2(距离2)、20离C的17(距离3)都近,所以选15。
    • B的两个索引里,16离A的15最近(距离1),比2离A的0(距离2)近,选16。
    • C的两个索引里,17离B的16最近(距离1),比7离B的2(距离5)近,选17。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:45:36