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