найти наиболее близкие значения между подсписками с порогом - PullRequest
0 голосов
/ 21 января 2019

У меня есть функция для расчета ближайшего значения между подсписками.Но мне нужно найти только одно значение для каждого подсписка, учитывая порог.Что я могу сделать?

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 голосов
/ 21 января 2019

Поскольку ваша переменная 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]
...