Size: a a a

Django [ru] #STAY HOME

2019 December 17

AK

Andrey 🦉 Kovalchuk in Django [ru] #STAY HOME
Разве list() не динамический array?
источник

N

N1LEX in Django [ru] #STAY HOME
Andrey 🦉 Kovalchuk
Разве list() не динамический array?
Ты же сам выше скинул что там О1
источник

RS

Rust Saiargaliev in Django [ru] #STAY HOME
Rust Saiargaliev
Это о(1)
Но это не проблема, собственно. Проблема в том, что для того чтоб сделать len (O(1)) ты заберешь и исполнишь запрос в бд, который вроде сам по себе o(n), плюс ты результат запроса загрузишь в память, что тоже сложно (еще один о(n)?)
источник

AK

Andrey 🦉 Kovalchuk in Django [ru] #STAY HOME
https://yourbasic.org/algorithms/time-complexity-arrays/#dynamic-array - исходя из этого описания, я бы предположил, что вычисляться длина списка должна за O(n).

Но раз она вычисляется за O(1), то либо это не динамический array, либо я гдето в другом не прав.
источник

RS

Rust Saiargaliev in Django [ru] #STAY HOME
и только потом посчитаешь длину
источник

AK

Andrey 🦉 Kovalchuk in Django [ru] #STAY HOME
Rust Saiargaliev
и только потом посчитаешь длину
Вопрос чисто в длине уже)
источник

AK

Andrey 🦉 Kovalchuk in Django [ru] #STAY HOME
С выборкой все одназначно. Это отстой.
источник

RS

Rust Saiargaliev in Django [ru] #STAY HOME
Andrey 🦉 Kovalchuk
Вопрос чисто в длине уже)
Ну o(1) же
источник

AK

Andrey 🦉 Kovalchuk in Django [ru] #STAY HOME
Rust Saiargaliev
Ну o(1) же
Я и пытаюсь разобраться почему.
источник

RS

Rust Saiargaliev in Django [ru] #STAY HOME
Он лен исполнит на списке
источник

RS

Rust Saiargaliev in Django [ru] #STAY HOME
лен на списке исполняется в памяти (просто подсчет элементов)
источник

AK

Andrey 🦉 Kovalchuk in Django [ru] #STAY HOME
Rust Saiargaliev
лен на списке исполняется в памяти (просто подсчет элементов)
И это же не O(1)
источник

AK

Andrey 🦉 Kovalchuk in Django [ru] #STAY HOME
Я накопал, что python для объектов list based уже рассчитал длину и положил рядом - вот от туда и O(1)
источник

N

N1LEX in Django [ru] #STAY HOME
Операции списка  On
источник

AK

Andrey 🦉 Kovalchuk in Django [ru] #STAY HOME
и кажется, это единственно разумное объяснение. Предварительный подсчет.
источник

RS

Rust Saiargaliev in Django [ru] #STAY HOME
Andrey 🦉 Kovalchuk
И это же не O(1)
Не, подсчет в памяти идет, не в питоне. В питоне он уже подсчитан, да, получается как атрибут просто, к которому доступаемся
источник

AK

Andrey 🦉 Kovalchuk in Django [ru] #STAY HOME
Rust Saiargaliev
Не, подсчет в памяти идет, не в питоне. В питоне он уже подсчитан, да, получается как атрибут просто, к которому доступаемся
Вот. Т.е. интерпритатор делает все равно эту O(n) процедуру за нас, хотим мы этого или нет. В таком случае, len(queryset) добавляет нам эту самую процедуру даром. Даже просто вызов queryset-а уже даст эту процедуру.
источник

AK

Andrey 🦉 Kovalchuk in Django [ru] #STAY HOME
Что делает .count() ещё более выигрышным вариантом, как мне кажется.
источник

AK

Andrey 🦉 Kovalchuk in Django [ru] #STAY HOME
Поправьте, если ошибаюсь.
источник

RS

Rust Saiargaliev in Django [ru] #STAY HOME
👍
источник