Как проверить, находится ли элемент списка между кортежами в другом списке? - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь вернуть пару кортежей в списке, когда элемент в другом списке численно находится между ними. Я просмотрел сайт для помощи, но я не смог найти решение, которое работает / может быть адаптировано для меня.

Сначала рассмотрим два списка ниже:

my_list = [1.5, 1.2, 1.1]
min_max = [(1.1, 1.4), (1.0, 1.3), (1.6, 1.8)]

Мне нужен каждый элемент в my_list , чтобы перебирать каждую пару кортежей в min_max список, возвращая пару, когда она находится в этом диапазоне. Используя данные из my_list , он вернет:

(1.1, 1.4)
(1.0, 1.3)

Обратите внимание, что, хотя и 1.2, и 1.1 оба попадают между (1.0, 1.3), мне нужно, чтобы он возвращался только один раз. Ход выполнения: я могу перебирать список, когда диапазон фиксируется с помощью функции lambda , и я попытался расширить его с помощью итерации списка, но не могу заставить его работать

list_return = filter(lambda x: 1.1 <= x <= 1.5, my_list)
[i for i in my_list]
print (list_return)

Я перепробовал все виды вариаций, и я начинаю задумываться, правильно ли я подхожу к этому?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Вы можете сделать

my_list = [1.5, 1.2, 1.1]
min_max = [(1.1, 1.4), (1.0, 1.3), (1.6, 1.8)]
for i in[i for i in min_max if list(filter(lambda x: min(i) <= x <= max(i), my_list))]:
    print(i)

Это выдаст

(1.1, 1.4)
(1.0, 1.3)
0 голосов
/ 29 апреля 2020

Похоже, вы застряли, пытаясь перебрать my_list, но это проще перебрать min_max и проверить, есть ли какие-либо значения в my_list между каждой парой. Это работает для меня.

result = [(a, b) for a, b in min_max if any(a <= item <= b for item in my_list)]
print(result)

И я получаю

[(1.1, 1.4), (1.0, 1.3)]
...