在具有阈值的子列表之间找到最接近的值

find closest values between sublists with threshold

我有一个函数可以计算子列表之间最接近的值。 但考虑到阈值,我只需要为每个子列表找到一个值。 我能做什么?

eee=[[22,27,28],[23,18,38]] 
www=[[30],[20]]

xx1=[]
for ee, ww in zip(eee, www):
    for w in ww:
        xx=[]
        for e in ee:
            cc = abs(e - w)
            if -7 <= cc <= 7:
                xx.append(e)
    xx1.append(xx)
print(xx1)

期望值可以是:

[[28],[18]]

由于您的 www 变量是列表的列表而不是整数列表,因此即使每个子列表中只有一个值,它的每个子列表也可能包含多个值在你的例子中。如果www中的每个子列表确实可以有多个值,我建议你使用itertools.product产生两个列表对应子列表中每个项目的所有组合,然后使用 min 函数和关键函数 returns 每对值之间的距离来查找 eee 的每个子列表中最接近列表中任何项目的项目www中相应的子列表:

from itertools import product
from operator import sub
[min(product(e, w), key=lambda p: abs(sub(*p)))[0] for e, w in zip(eee, www)]

这个returns:

[28, 18]