![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 10 Всего: 173 |
Точно так же, потому что перловым массивам в Питоне соответствует dict, а не list. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| Karadul |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: нет Всего: 1 |
Пардон, но dict - это хэш массив, и он тормознее. Или нет?
И кстати, почему массив называется list? Список - это структура, когда можно узнать следующий и (в двунаправленных списках) предыдущий элемент, обращение по индексу не предусмотрено, зато добавление/удаление элементов в/из середины гораздо легче. Или я что-то не понимаю? Это сообщение отредактировал(а) Karadul - 2.2.2010, 21:18 |
|||
|
||||
| kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
просто в питоне массивы имеют тип list )
-------------------- ![]() |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 10 Всего: 173 |
Тормознее в какой операции? Доступ к произвольному элементу? Асимптотика та же, просто константа больше. Много динамических языков вообще не имеют массивов как таковых, одними хэш-таблицами обходятся. Я перепутал, Perl к ним не относится, но тем не менее. Как раз присваивание элемента за пределами текущих границ массива нарушает неявный контракт на то, что эта операция должна иметь сложность O(1). А внутри массива, на здоровье:
Список — это не обязательно связанный список. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: нет Всего: 13 |
Т.е. здесь доступ по индексу константа и не зависит от длины списка? Я еще удивлялся, на кой ляд, Саммерфилд производит поиск сечением пополам в списке... -------------------- вопросов больше чем ответов |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 10 Всего: 173 |
Для типа list в Python — именно так. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 2 Всего: 44 |
тоже стало интересно
чот не вижу что text статическое поле Это сообщение отредактировал(а) chaos - 5.2.2010, 14:04 |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 9 Всего: 70 |
||||
|
||||
| Karadul |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: нет Всего: 1 |
Это - оригинальный код (со скрина он не копируется
А это - другой вариант.
Разница в том, что присваивание обьявляет переменную в init, и теперь хрен пойми, как обратиться к test2.var (не употребляя имени класса). global - не получается. Если в перле, охренев от их видения области видимости переменных (а там еще и my не видно в подпроцедурах Void, т.е. никак? И хэшэррей в питоне нифига не аналох перлового массива, и добавление в хэшмассив гораздо тормознее добавления в обычный массив? Или писать какую-то чушь вроде for a in range(10000): arr.append(None)? Короче, в треде назревает нифиговый такой питонкапец++ Это сообщение отредактировал(а) Karadul - 6.2.2010, 09:32 |
||||
|
|||||
| Karadul |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: нет Всего: 1 |
А вот еще. В питоне нету нормального for, как в C и ко, питоновский for - это foreach, и в for i in range(1e10) таки будет сгенерен список на 1e10 элементов, что сильно порадует производительностью. Если нужен for - приходится юзать while
А цикл с постусловием в питоне есть? |
|||
|
||||
| cutwater |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 1 Всего: 10 |
Karadul, а Вы о xrange слышали?
Кстати в 3й версии range работает именно как xrange |
|||
|
||||
| Karadul |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: нет Всего: 1 |
Кстати, 3-я версия еще в разработке, насколько я знаю.
|
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 10 Всего: 173 |
Можно объяснить, зачем это надо? Такое присваивание в массиве — если это действительно массив, а не подрумяненная хеш-таблица — в любом случае требует перераспределения памяти, явного или в потрохах рантайма. Меня категорически не устраивает ситуация, когда присваивание элемента внезапно может оказаться O(N) вместо O(1). Выделить список заданной длины в Питоне можно и проще: array = [None] * size. Вам стоит не полагаться на свои знания, а заглянуть на python.org. Добавлено через 2 минуты и 8 секунд P.S. Впрочем, чего я кормлю-то... -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| Karadul |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: нет Всего: 1 |
Явкурсе, что его можно скачать, но большинство библиотек есть только под 2.х, и пользоваться нам им пока не рекомендовали. Угу, а в яве/си как-то по другому? Или бывают массивы без выделения памяти? Как ни крути, а когда-то выделять память придется. И суммарное быстродействие по идее должно быть лучше, чем у хэш-массива. А кстати, а в хэш-массивах рехеша не бывает? Это сообщение отредактировал(а) Karadul - 6.2.2010, 12:45 |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 10 Всего: 173 |
В Java и Си память под массив выделяется при создании и размер динамического массива меняется явно, отдельными функциями. Если сделать так, как вы предлагаете, любое присваивание элемента массива может вызвать выделение памяти и копирование всего массива. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Python: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |