Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> плюсы и минусы сего ЯП, пожалуйста ;) 
:(
    Опции темы
Void
Дата 2.2.2010, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 10
Всего: 173



Цитата(Karadul @  1.2.2010,  07:47 Найти цитируемый пост)
А как в питоне присвоить в середину массива?

Точно так же, потому что перловым массивам в Питоне соответствует dict, а не list.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Karadul
Дата 2.2.2010, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: нет
Всего: 1



Пардон, но dict - это хэш массив, и он тормознее. Или нет?

И кстати, почему массив называется list? Список - это структура, когда можно узнать следующий и (в двунаправленных списках) предыдущий элемент, обращение по индексу не предусмотрено, зато добавление/удаление элементов в/из середины гораздо легче. Или я что-то не понимаю?

Это сообщение отредактировал(а) Karadul - 2.2.2010, 21:18
PM MAIL   Вверх
kosmonaFFFt
Дата 2.2.2010, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



просто в питоне массивы имеют тип list )


--------------------
user posted image
PM MAIL ICQ   Вверх
Void
Дата 3.2.2010, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 10
Всего: 173



Цитата(Karadul @  2.2.2010,  23:16 Найти цитируемый пост)
Пардон, но dict - это хэш массив, и он тормознее. Или нет?

Тормознее в какой операции? Доступ к произвольному элементу? Асимптотика та же, просто константа больше. Много динамических языков вообще не имеют массивов как таковых, одними хэш-таблицами обходятся. Я перепутал, Perl к ним не относится, но тем не менее.
Как раз присваивание элемента за пределами текущих границ массива нарушает неявный контракт на то, что эта операция должна иметь сложность O(1).
А внутри массива, на здоровье:
Код
>>> a = range(5)
>>> a
[0, 1, 2, 3, 4]
>>> a[3] = 9
>>> a
[0, 1, 2, 9, 4]

Цитата(Karadul @  2.2.2010,  23:16 Найти цитируемый пост)
И кстати, почему массив называется list? Список - это структура, когда можно узнать следующий и (в двунаправленных списках) предыдущий элемент, обращение по индексу не предусмотрено, зато добавление/удаление элементов в/из середины гораздо легче. Или я что-то не понимаю?

Список — это не обязательно связанный список.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Леопольд
Дата 4.2.2010, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: нет
Всего: 13



Цитата(Void @  3.2.2010,  08:46 Найти цитируемый пост)

Список — это не обязательно связанный список. 

Т.е. здесь доступ по индексу константа и не зависит от длины списка? Я еще удивлялся, на кой ляд, Саммерфилд производит поиск сечением пополам в списке...


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Void
Дата 4.2.2010, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 10
Всего: 173



Цитата(Леопольд @  4.2.2010,  21:45 Найти цитируемый пост)
Т.е. здесь доступ по индексу константа и не зависит от длины списка?

Для типа list в Python — именно так.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
chaos
Дата 5.2.2010, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 2
Всего: 44



тоже стало интересно
Код

>>> class SomeClass:
    text = "empty"
    def __init__(self, str):
        self.text = str

        
>>> a = SomeClass("hello")
>>> b = SomeClass("wordl")
>>> a.text
'hello'
>>> b.text
'wordl'
>>> a.text
'hello'


чот не вижу что text статическое поле



Это сообщение отредактировал(а) chaos - 5.2.2010, 14:04
PM WWW   Вверх
Daevaorn
Дата 5.2.2010, 14:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 9
Всего: 70



Цитата(chaos @  5.2.2010,  15:01 Найти цитируемый пост)
чот не вижу что text статическое поле

А почему вы SomeClass.text не вывели?
PM MAIL WWW   Вверх
Karadul
Дата 6.2.2010, 09:31 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: нет
Всего: 1



Это - оригинальный код (со скрина он не копируется smile)
Код

class test:
    var = []
    def __init__(self, x):
        self.var.append(x)

v1 = test(10)
v2 = test(20)
v1
v1.var
v2.var
v1.__dict__
v2.__dict__
test.__dict__



А это - другой вариант.
Код

class test2:
    var = []
    def __init__(self, x):
        self.var = x

vv1 = test2(10)
vv2 = test2(20)
vv1
vv1.var
vv2.var
vv1.__dict__
vv2.__dict__
test2.__dict__



Разница в том, что присваивание обьявляет переменную в init,  и теперь хрен пойми, как обратиться к test2.var (не употребляя имени класса). global - не получается. 

Если в перле, охренев от их видения области видимости переменных (а там еще и my не видно в подпроцедурах smile), можно влепить use strict и писать, как привых, то в питоне придется кусать кактус smile

Void, т.е. никак? И хэшэррей в питоне нифига не аналох перлового массива, и добавление в хэшмассив гораздо тормознее добавления в обычный массив? Или писать какую-то чушь вроде for a in range(10000): arr.append(None)?

Короче, в треде назревает нифиговый такой питонкапец++ smile

Это сообщение отредактировал(а) Karadul - 6.2.2010, 09:32
PM MAIL   Вверх
Karadul
Дата 6.2.2010, 09:59 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: нет
Всего: 1



А вот еще. В питоне нету нормального for, как в C и ко, питоновский for - это foreach, и в for i in range(1e10) таки будет сгенерен список на 1e10 элементов, что сильно порадует производительностью. Если нужен for - приходится юзать while smile

А цикл с постусловием в питоне есть?
PM MAIL   Вверх
cutwater
Дата 6.2.2010, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: 1
Всего: 10



Karadul, а Вы о xrange слышали?
Кстати в 3й версии range работает именно как xrange


--------------------
user posted image
PM MAIL   Вверх
Karadul
Дата 6.2.2010, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: нет
Всего: 1



Кстати, 3-я версия еще в разработке, насколько я знаю.
PM MAIL   Вверх
Void
Дата 6.2.2010, 12:33 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 10
Всего: 173



Цитата(Karadul @  6.2.2010,  11:31 Найти цитируемый пост)
Void, т.е. никак? И хэшэррей в питоне нифига не аналох перлового массива, и добавление в хэшмассив гораздо тормознее добавления в обычный массив? Или писать какую-то чушь вроде for a in range(10000): arr.append(None)?

Можно объяснить, зачем это надо? Такое присваивание в массиве — если это действительно массив, а не подрумяненная хеш-таблица — в любом случае требует перераспределения памяти, явного или в потрохах рантайма. Меня категорически не устраивает ситуация, когда присваивание элемента внезапно может оказаться O(N) вместо O(1).
Выделить список заданной длины в Питоне можно и проще: array = [None] * size.
Цитата(Karadul @  6.2.2010,  13:39 Найти цитируемый пост)
Кстати, 3-я версия еще в разработке, насколько я знаю. 

Вам стоит не полагаться на свои знания, а заглянуть на python.org.

Добавлено через 2 минуты и 8 секунд
P.S. Впрочем, чего я кормлю-то...


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Karadul
Дата 6.2.2010, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: нет
Всего: 1



Цитата(Void @  6.2.2010,  12:33 Найти цитируемый пост)
Вам стоит не полагаться на свои знания, а заглянуть на python.org.

Явкурсе, что его можно скачать, но большинство библиотек есть только под 2.х, и пользоваться нам им пока не рекомендовали.

Цитата(Void @  6.2.2010,  12:33 Найти цитируемый пост)
Можно объяснить, зачем это надо? Такое присваивание в массиве — если это действительно массив, а не подрумяненная хеш-таблица — в любом случае требует перераспределения памяти, явного или в потрохах рантайма. Меня категорически не устраивает ситуация, когда присваивание элемента внезапно может оказаться O(N) вместо O(1).Выделить список заданной длины в Питоне можно и проще: array = [None] * size.


Угу, а в яве/си как-то по другому? Или бывают массивы без выделения памяти?
Как ни крути, а когда-то выделять память придется.
И суммарное быстродействие по идее должно быть лучше, чем у хэш-массива. А кстати, а в хэш-массивах рехеша не бывает?

Это сообщение отредактировал(а) Karadul - 6.2.2010, 12:45
PM MAIL   Вверх
Void
Дата 6.2.2010, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 10
Всего: 173



Цитата(Karadul @  6.2.2010,  14:42 Найти цитируемый пост)
Угу, а в яве/си как-то по другому? Или бывают массивы без выделения памяти?
Как ни крути, а когда-то выделять память когда-то придется. 

В Java и Си память под массив выделяется при создании и размер динамического массива меняется явно, отдельными функциями. Если сделать так, как вы предлагаете, любое присваивание элемента массива может вызвать выделение памяти и копирование всего массива.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0568 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.