Форум сайта python.su
например:
есть отсортированный список целых чисел:
sp = [0, 5, 19, 33, 56, 71, 75]
59
56
random_list = [0, 5, 19, 33, 56, 71, 75] def number_near(n): if n in random_list: return n random_list.append(n) random_list.sort() return random_list.pop(random_list.index(n) - 1) print number_near(59)
Офлайн
a = [0, 5, 19, 33, 56, 71, 75] def f(n): if n<a[0]: return "n меньше всех" for i in a: if n < i: return x x = i else: return "n больше всех" print f(59)
Офлайн
если не хотите создавать еще одну переменную, то можно так
a = [0, 5, 19, 33, 56, 71, 75] def f(n): if n<a[0]: return "n меньше всех" for i, j in enumerate(a): if n < j: return a[i-1] else: return "n больше всех" print f(59)
Офлайн
может выглядит и не так красиво как у вас, но работает раза в 3 быстрее! может есть и более красивые методы, но все они сводятся к этому.
Офлайн
terabaytда спасибо действительно быстрее - чевото я перемудрил
может выглядит и не так красиво как у вас, но работает раза в 3 быстрее
Офлайн
оу, если у вас такой большой список, то можно использовать какието специальные алгоритмы. если вы думаете работать с таими большимим списками, напишите мне на почту, я оптимизирую алгоритм, будет еще быстрее работать.
Офлайн
Да, да
Simple is better than complex.
у меня эта надпись всегда перед глазами
Офлайн
Вот если элементов больше 2000000 то НУЖНОиспользовать более быстрый поиск, и тогда поиск можно сократить в 10 раз, как минимум!
Офлайн
terabaytнет реальный список - 500 - 800 элементов
оу, если у вас такой большой список
Отредактировано vrabey (Июль 1, 2014 18:46:14)
Офлайн
вот ещё нашёл модуль bisect
from bisect import bisect sp = [0, 5, 19, 33, 56, 71, 75] def number_near(num): return sp[bisect(sp, num) - 1] print number_near(59)
Отредактировано vrabey (Июль 1, 2014 20:11:34)
Офлайн