一种解决方案是使用NumPy在skis列表中找到最接近的值(NumPy函数来自于
在NumPy数组中查找最接近的值)。然后遍历滑雪者并找到最接近的尺码。记得从列表中删除该尺码。
import numpy as np
def find_nearest(array, value):
array = np.asarray(array)
idx = (np.abs(array-value)).argmin()
return array[idx]
def pair(x, y):
skier_skis = []
skis_left = list(y)
for skier in x:
skier_skis.append((skier, find_nearest(skis_left, skier)))
skis_left.remove(skier_skis[-1][1])
return skier_skis
skiers = [6, 11, 13]
skis = [5, 7, 9, 14]
pair(skiers, skis)
返回 [(6,5),(11,9),(13,14)]。
如果您的目标只是返回最小差异,则需要遍历 skier_skis 列表并求和其差值。
编辑:正如 @Rivers Shall 指出的那样,这种方法可能并不总是返回最优解。