我有一个函数可以计算子列表之间的最接近值。 但是考虑到阈值,我只需要为每个子列表找到一个值。 我该怎么办?
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]]
答案 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]