Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 18, 2009 08:42:43

test157
От:
Зарегистрирован: 2009-02-25
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

Что быстрее, tuple или sqlite?

PooH
мое ЛЯ-ЛЯ - исключительно из опыта. работа с листами, в питоне очень медленная когда кол-во элементов идет на тысячи.

ZZZ
действительно быстро - не знал. спасибо, возьму на вооружение.



Офлайн

#2 Авг. 18, 2009 08:58:42

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Что быстрее, tuple или sqlite?

test157
мое ЛЯ-ЛЯ - исключительно из опыта. работа с листами, в питоне очень медленная когда кол-во элементов идет на тысячи.
Я про словари



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Авг. 18, 2009 09:04:29

test157
От:
Зарегистрирован: 2009-02-25
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

Что быстрее, tuple или sqlite?

хм, что то странное. я сейчас проверил код с бисектом и он 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



Офлайн

#4 Авг. 18, 2009 09:18:46

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Что быстрее, tuple или sqlite?

test157
хм, что то странное. я сейчас проверил код с бисектом и он 4 раза медленнее нежели прямиком со с листом. что я делаю не так?
Вы же проверяете только время создания списка, естественно простое добавление в конец списка будет быстрее, чем поиск места в списке и вставка туда.
Выигрыш будет когда вы начнете проверять наличие слова в списке.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#5 Авг. 18, 2009 10:45:33

test157
От:
Зарегистрирован: 2009-02-25
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

Что быстрее, tuple или sqlite?

не могу понять - как оно точно работает.

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

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

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

4. и что дают - lo, hi - параметры?



Отредактировано (Авг. 18, 2009 10:47:05)

Офлайн

#6 Авг. 18, 2009 11:02:11

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Что быстрее, tuple или sqlite?

test157
не могу понять - как оно точно работает.

1. я так понимаю оно просто постоянно держит список отсортированным, и засчет этого обеспечивается более высокая скорость?
Да, держит отсортированным. Скорость держится за счет двоичного поиска. Грубо говоря: она бьет список пополам - заданный элемент находится или в одной половине или в другой, дальше она бьет пополам половину и так далее. За счет этого получается сложность O(log n), при обычном поиске в списке сложность будет линейной
test157
2. есть ли разница от обычного sorted тогда?
При вставке элемент вставляется сразу в нужную позиции
test157
3. и в чем отличае insort_right и insort_left? оба оставляют список отсортированным.
если в списке уже есть такой элемент первая вставит новый элемент после старого, вторая перед
test157
4. и что дают - lo, hi - параметры?
это если хотите искать только в части списка, lo и hi задают элементы между которыми будет произведен поиск



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#7 Авг. 18, 2009 11:05:33

test157
От:
Зарегистрирован: 2009-02-25
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

Что быстрее, tuple или sqlite?

если в списке уже есть такой элемент первая вставит новый элемент после старого, вторая перед
а в чем различие? если элементы ОДИНАКОВЫЕ - какая разница ДО или ПОСЛЕ он поставится?



Офлайн

#8 Авг. 18, 2009 11:11:38

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Что быстрее, tuple или sqlite?

test157
если в списке уже есть такой элемент первая вставит новый элемент после старого, вторая перед
а в чем различие? если элементы ОДИНАКОВЫЕ - какая разница ДО или ПОСЛЕ он поставится?
У вас могут в списке храниться объекты с переопределеным методом __cmp__, при этом при сравнении они будут одинаковые, а сами объекты различаться. Например, пусть у меня объект класса Command или его наследника, у которого есть атрибут порядок исполнения, и в __cmp__ я сравниваю этот порядок. При этом сами команды разные.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#9 Авг. 18, 2009 11:24:15

test157
От:
Зарегистрирован: 2009-02-25
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

Что быстрее, tuple или sqlite?

так ведь бисект возьмет результат от переопределенного метода __cmp__ и если объекты не равны (т.е. CPM вернет не ноль), то уже все понятно с ними - а если равны, то он поставит ДО или ПОСЛЕ в зависимости от функции лефт или райт.

вопрос остается открытым? или я чегото не понимаю?



Офлайн

#10 Авг. 18, 2009 11:33:03

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Что быстрее, tuple или sqlite?

test157
так ведь бисект возьмет результат от переопределенного метода __cmp__ и если объекты не равны (т.е. CPM вернет не ноль), то уже все понятно с ними - а если равны, то он поставит ДО или ПОСЛЕ в зависимости от функции лефт или райт.
Ну вот для этого как раз и две функции. Может я хочу если приоритет одинаковый сначала выполнять те команды что были добавлены раньше, или наоборот. И зависимо от этого буду использовать для вставки или insort_right или insort_left. Хотя, действительно, нужно такое довольно редко. Если вам это не важно пользуйте insort и не ломайте голову ;)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version