Size: a a a

Сообщество Python Программистов

2020 August 25

ДП

Димитрий Перчаткин... in Сообщество Python Программистов
Привет. Мне нужно проверять входит ли число диапазон. Юзаю фильтры. К примеру стоит фильтр "дешевле 1000". Проверяю if <цена в записи> in cost_dict["<название фильтра>"]

cost_dict = {"дешевле 1000" : list(range(0, 1000)),
                     "1000 - 2000" : list(range(1000, 2000)),
                     "2000 - 3000" : list(range(2000, 3000)),
                     "3000 - 4000" : list(range(3000, 4000)),
                     "4000 - 5000" : list(range(4000, 5000)),
                     "от 5000" : list(range(5000, 999999))}
Как сделать то же самое, но не так ущербно?
источник

M

Maksim in Сообщество Python Программистов
Что-то ты совсем намутил лютое)
источник

ДП

Димитрий Перчаткин... in Сообщество Python Программистов
Сначала мне казалось это хорошей идеей...
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Димитрий Перчаткин
Привет. Мне нужно проверять входит ли число диапазон. Юзаю фильтры. К примеру стоит фильтр "дешевле 1000". Проверяю if <цена в записи> in cost_dict["<название фильтра>"]

cost_dict = {"дешевле 1000" : list(range(0, 1000)),
                     "1000 - 2000" : list(range(1000, 2000)),
                     "2000 - 3000" : list(range(2000, 3000)),
                     "3000 - 4000" : list(range(3000, 4000)),
                     "4000 - 5000" : list(range(4000, 5000)),
                     "от 5000" : list(range(5000, 999999))}
Как сделать то же самое, но не так ущербно?
list перед ренжем можно убрать
источник

ДП

Димитрий Перчаткин... in Сообщество Python Программистов
Бензофуран Гетероцикл
list перед ренжем можно убрать
Без него не работало почему то. cost_dict["Дешевле 1000"] возвращал не список, а range(0, 1000)
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Димитрий Перчаткин
Без него не работало почему то. cost_dict["Дешевле 1000"] возвращал не список, а range(0, 1000)
Так а это чем-то мешает?
источник

ДП

Димитрий Перчаткин... in Сообщество Python Программистов
ХЗ)), тупанул чёт
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
x in range(...) как бы эквивалентно x in list(range(...))
источник

AT

Alexander T in Сообщество Python Программистов
Бензофуран Гетероцикл
list перед ренжем можно убрать
зависит от числа проверок, если много то лучше сразу листы сделать.
но я бы тут сделал кастомный класс с lower и higher band и переопределенным оператором in
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Димитрий Перчаткин
Привет. Мне нужно проверять входит ли число диапазон. Юзаю фильтры. К примеру стоит фильтр "дешевле 1000". Проверяю if <цена в записи> in cost_dict["<название фильтра>"]

cost_dict = {"дешевле 1000" : list(range(0, 1000)),
                     "1000 - 2000" : list(range(1000, 2000)),
                     "2000 - 3000" : list(range(2000, 3000)),
                     "3000 - 4000" : list(range(3000, 4000)),
                     "4000 - 5000" : list(range(4000, 5000)),
                     "от 5000" : list(range(5000, 999999))}
Как сделать то же самое, но не так ущербно?
Но вот range(5000, 9999999) это немного не то
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Alexander T
зависит от числа проверок, если много то лучше сразу листы сделать.
но я бы тут сделал кастомный класс с lower и higher band и переопределенным оператором in
Так с чего бы
источник

ДП

Димитрий Перчаткин... in Сообщество Python Программистов
Бензофуран Гетероцикл
Но вот range(5000, 9999999) это немного не то
Да, там Memory Error вылетает
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Alexander T
зависит от числа проверок, если много то лучше сразу листы сделать.
но я бы тут сделал кастомный класс с lower и higher band и переопределенным оператором in
Рейнж проверяет по границам и шагу же
Это дешевле чем проверка вхождения в лист
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Димитрий Перчаткин
Да, там Memory Error вылетает
Смари, палю фичу
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
У dict есть фича такая
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
default или как-то так
источник

ДП

Димитрий Перчаткин... in Сообщество Python Программистов
Димитрий Перчаткин
Да, там Memory Error вылетает
Я просто верхний диапазон уменьшил
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Димитрий Перчаткин
Я просто верхний диапазон уменьшил
Это потому что ты рейнж в лист перегоняешь
источник

AT

Alexander T in Сообщество Python Программистов
Димитрий Перчаткин
Привет. Мне нужно проверять входит ли число диапазон. Юзаю фильтры. К примеру стоит фильтр "дешевле 1000". Проверяю if <цена в записи> in cost_dict["<название фильтра>"]

cost_dict = {"дешевле 1000" : list(range(0, 1000)),
                     "1000 - 2000" : list(range(1000, 2000)),
                     "2000 - 3000" : list(range(2000, 3000)),
                     "3000 - 4000" : list(range(3000, 4000)),
                     "4000 - 5000" : list(range(4000, 5000)),
                     "от 5000" : list(range(5000, 999999))}
Как сделать то же самое, но не так ущербно?
class Range:
   def __init__(self, lower, higher):
       self.lower = lower
       self.higher = higher

   def __contains__(self, x):
       return self.lower <= x <= self.higher

print(5 in Range(4, 10))
источник

AT

Alexander T in Сообщество Python Программистов
Бензофуран Гетероцикл
Рейнж проверяет по границам и шагу же
Это дешевле чем проверка вхождения в лист
а, не знал.
источник