Найти - Пользователи
Полная версия: Что быстрее, tuple или sqlite?
Начало » Python для новичков » Что быстрее, tuple или sqlite?
1 2 3
test157
PooH
мое ЛЯ-ЛЯ - исключительно из опыта. работа с листами, в питоне очень медленная когда кол-во элементов идет на тысячи.

ZZZ
действительно быстро - не знал. спасибо, возьму на вооружение.
PooH
test157
мое ЛЯ-ЛЯ - исключительно из опыта. работа с листами, в питоне очень медленная когда кол-во элементов идет на тысячи.
Я про словари
test157
хм, что то странное. я сейчас проверил код с бисектом и он 4 раза медленнее нежели прямиком со с листом. что я делаю не так?
chars = u'qwertyuiopasdfghjklzxcvbnm_01234567890'

def create_word():
w = u''
for n in range(random.randint(3, 13)):
w += random.choice(chars)
return w


def create_list_of_words(count_of_words):
l = []
for i in xrange(count_of_words):
bisect.insort(l, create_word())
return l

t = time.time()
create_list_of_words(100000)
print time.time() - t

t = time.time()
l = []
for i in xrange(100000):
l.append(create_word())
print time.time() - t
и вот результат:
BISECT: 4.01258802414
LIST: 1.40734910965
PooH
test157
хм, что то странное. я сейчас проверил код с бисектом и он 4 раза медленнее нежели прямиком со с листом. что я делаю не так?
Вы же проверяете только время создания списка, естественно простое добавление в конец списка будет быстрее, чем поиск места в списке и вставка туда.
Выигрыш будет когда вы начнете проверять наличие слова в списке.
test157
не могу понять - как оно точно работает.

1. я так понимаю оно просто постоянно держит список отсортированным, и засчет этого обеспечивается более высокая скорость?

2. есть ли разница от обычного sorted тогда?

3. и в чем отличае insort_right и insort_left? оба оставляют список отсортированным.

4. и что дают - lo, hi - параметры?
PooH
test157
не могу понять - как оно точно работает.

1. я так понимаю оно просто постоянно держит список отсортированным, и засчет этого обеспечивается более высокая скорость?
Да, держит отсортированным. Скорость держится за счет двоичного поиска. Грубо говоря: она бьет список пополам - заданный элемент находится или в одной половине или в другой, дальше она бьет пополам половину и так далее. За счет этого получается сложность O(log n), при обычном поиске в списке сложность будет линейной
test157
2. есть ли разница от обычного sorted тогда?
При вставке элемент вставляется сразу в нужную позиции
test157
3. и в чем отличае insort_right и insort_left? оба оставляют список отсортированным.
если в списке уже есть такой элемент первая вставит новый элемент после старого, вторая перед
test157
4. и что дают - lo, hi - параметры?
это если хотите искать только в части списка, lo и hi задают элементы между которыми будет произведен поиск
test157
если в списке уже есть такой элемент первая вставит новый элемент после старого, вторая перед
а в чем различие? если элементы ОДИНАКОВЫЕ - какая разница ДО или ПОСЛЕ он поставится?
PooH
test157
если в списке уже есть такой элемент первая вставит новый элемент после старого, вторая перед
а в чем различие? если элементы ОДИНАКОВЫЕ - какая разница ДО или ПОСЛЕ он поставится?
У вас могут в списке храниться объекты с переопределеным методом __cmp__, при этом при сравнении они будут одинаковые, а сами объекты различаться. Например, пусть у меня объект класса Command или его наследника, у которого есть атрибут порядок исполнения, и в __cmp__ я сравниваю этот порядок. При этом сами команды разные.
test157
так ведь бисект возьмет результат от переопределенного метода __cmp__ и если объекты не равны (т.е. CPM вернет не ноль), то уже все понятно с ними - а если равны, то он поставит ДО или ПОСЛЕ в зависимости от функции лефт или райт.

вопрос остается открытым? или я чегото не понимаю?
PooH
test157
так ведь бисект возьмет результат от переопределенного метода __cmp__ и если объекты не равны (т.е. CPM вернет не ноль), то уже все понятно с ними - а если равны, то он поставит ДО или ПОСЛЕ в зависимости от функции лефт или райт.
Ну вот для этого как раз и две функции. Может я хочу если приоритет одинаковый сначала выполнять те команды что были добавлены раньше, или наоборот. И зависимо от этого буду использовать для вставки или insort_right или insort_left. Хотя, действительно, нужно такое довольно редко. Если вам это не важно пользуйте insort и не ломайте голову ;)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB