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

时间:2019-01-21 18:35:32

标签: python-3.x sublist closest

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

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]]

1 个答案:

答案 0 :(得分:0)

由于您的www变量是一个列表列表,而不是整数列表,因此即使您的每个子列表中只有一个值,它的每个子列表也可能包含多个值例。如果www的每个子列表中确实存在多个值,我建议您使用itertools.product来生成两个列表的相应子列表中各项的所有组合,然后将min函数与键函数一起使用,该函数返回每对值之间的距离,以在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)]

这将返回:

[28, 18]