Простой подход - проверить все элементы:
items = [10, 20, 30, 40]
ranges = [[1, 20], [21, 30]]
result = all(any(low <= i <= high for low, high in ranges) for i in items)
Ради интереса, вы можете сделать проверку содержимого немного другой, используя range
объекты:
range_objects = [range(low, high + 1) for low, high in ranges]
filtered_items = all(any(i in r for r in range_objects) for i in items)
Если вы хотите получить соответствующие предметы:
good = [i for i in items if any(low <= i <= high for low, high in ranges)]
Вместо этого вы также можете получить плохие элементы:
bad = [i for i in items if all(i < low or i > high for low, high in ranges)]
Таким образом, ваш первоначальный результат просто not bad
.