Уведомления

Группа в Telegram: @pythonsu

#1 Июль 8, 2009 21:36:06

pytol
От:
Зарегистрирован: 2009-07-08
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

ограничение встроено в Питон или из-за железа?

Ferroman
Если вам надо хранить столько строк, то держать их в оперативной памяти, мммм, не лучшее решение.
Используйте внешние носители.
да, например, сгенерить файл со строками и поместить его на жесткий диск, так?
пусть теперь строки разной длины, если я хочу пару строк сконкатенировать и потом во всем списке поискать нет ли совпадения с уже имеющейся строкой, то питон как будет действовать (без размещения всего списка в ОЗУ)? подгружать файл частями?! наверное это несложно …

но хотелось бы в динамике - вот не хранит же питон таблицу умножения вплоть до гугол в степени 100, а 11 в степени 100 и еще в степени 100 практически мгновенно выдает на экран (на 4 страницах А4)… почему же со строками так…



Офлайн

#2 Июль 8, 2009 21:47:01

pytol
От:
Зарегистрирован: 2009-07-08
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

ограничение встроено в Питон или из-за железа?

все к тому же… генератор списков (где то сказано) эквивалентен коду с циклами, так ли это?
вот выдает для z - false а для t - true то есть значения совпадают а средства неэквивалентные все же? что эффективнее? - это к строкам ….

g=[x+y for x in 'ab' for y in 'ab']

h=[]
for x in 'ab':
for y in 'ab':
h.append(x+y)


z= (g is h)
t= (g == h)
print "z="+`z` + " t= "+`t`



Отредактировано (Июль 8, 2009 21:48:24)

Офлайн

#3 Июль 8, 2009 22:45:54

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

ограничение встроено в Питон или из-за железа?

pytol
все к тому же… генератор списков (где то сказано) эквивалентен коду с циклами, так ли это?
вот выдает для z - false а для t - true то есть значения совпадают а средства неэквивалентные все же?
Не средства неэквивалентные, а объекты h и g разные. Так они разные по-любому будут. вот, смотрите:
>>> h = []
>>> g = []
>>> print g is h, g == h
False True



Офлайн

#4 Июль 8, 2009 22:56:40

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

ограничение встроено в Питон или из-за железа?

да, например, сгенерить файл со строками и поместить его на жесткий диск, так?
пусть теперь строки разной длины, если я хочу пару строк сконкатенировать и потом во всем списке поискать нет ли совпадения с уже имеющейся строкой, то питон как будет действовать (без размещения всего списка в ОЗУ)? подгружать файл частями?! наверное это несложно …
База данных. Можно, а может даже лучше, нереляционную - Berkeley DB например.
но хотелось бы в динамике - вот не хранит же питон таблицу умножения вплоть до гугол в степени 100, а 11 в степени 100 и еще в степени 100 практически мгновенно выдает на экран (на 4 страницах А4)… почему же со строками так…
Потому что число, даже такое большое, не занимает столько памяти. А в строках каждый символ - минимум байт. 4,5 млрд строк, даже по 1 символу символов будет занимать 4 терабайта. Очевидно, что никакой оперативной памяти не хватит. Мало того - для нормальной обработки такого количества данных стоит кластер мастерить.

Я бы ещё раз посоветовал пересмотреть подход к задаче вообще. Может есть математическое решение, не требующее такого количества ресурсов, или, как минимум сильно его уменьшая.
Делитесь задачей - может что-то придумаем.

Офлайн

#5 Июль 8, 2009 23:36:11

pytol
От:
Зарегистрирован: 2009-07-08
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

ограничение встроено в Питон или из-за железа?

Ed
Не средства неэквивалентные, а объекты h и g разные. Так они разные по-любому будут. вот, смотрите:
>>> h =
>>> g =
>>> print g is h, g == h
False True
здорово отмечено!

тогда вопрос уточняем - да, как объекты они разные, но чтобы быть эквивалентными, они ДОЛЖНЫ уж точно генерить один и тот же байт код!?
готовим два файла, один со строкой генератора списка, другой с кодом “эквивалентного” ему цикла… потом применяем команду
import py_compile
py_compile.comoile("первый файл")
py_compile.compile("второй файл")
потом полученные файлики с расширением .pyc - смотрим WinHex - и видим
начинаются они одинаково, но!!!
по слухам более эффективная строка генератора занимает 0х196 байт, а цикл - 0х176 байт!!!

что же все-таки нет эквивалентности этих приемов программирования… !!!???
(как то в питоне можно еще смотреть время выполнения модуля….)

если нет , то в упомянутой книге нас стр.145 ошибка - когда автор утверждает эту эквивалентность…

вопрос остался - есть или нет эквивалентность?



Отредактировано (Июль 8, 2009 23:38:41)

Офлайн

#6 Июль 8, 2009 23:59:10

pytol
От:
Зарегистрирован: 2009-07-08
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

ограничение встроено в Питон или из-за железа?

Ferroman
База данных. Можно, а может даже лучше, нереляционную - Berkeley DB например.

——————————————————————–
но хотелось бы в динамике - вот не хранит же питон таблицу умножения вплоть до гугол в степени 100, а 11 в степени 100 и еще в степени 100 практически мгновенно выдает на экран (на 4 страницах А4)… почему же со строками так…
———————————————————————————–
Потому что число, даже такое большое, не занимает столько памяти. А в строках каждый символ - минимум байт. 4,5 млрд строк, даже по 1 символу символов будет занимать 4 терабайта. Очевидно, что никакой оперативной памяти не хватит. Мало того - для нормальной обработки такого количества данных стоит кластер мастерить.
Большое спасибо, вы как раз нашли мою оплошность, из-за которой возникли вопросы! Я то думал (точнее - не подумал!) мегабайты а 10 в 9-й точно терабайты… куда уж на жесткий диск такое…!!!

Что по числам, то они занимают в памяти больше, чем сиволы, если они больше 256… (тип char = 1 байту …) …
я наверное неудачно выразился - когда питон выдает на гора число 11 в степени 10000 он сохраняет именно 10000 символов для вывода на экран, а все числа меньшие этого его не интересуют, в отличие от моих строк…, поэтому приведенное мной неадекватно…
вообще говоря стоит уточнить, что в компьютере чисел нет вообще, тут только строки из двух символов 0 и 1 , которые изначально (как состояния ячеек памяти реализованных, напр., триггерами) НЕ ЕСТЬ ЧИСЛА - умножать, складывать, раскрывать скобки с состояними ячеек памяти изначально нелепо (так же как мои буквы а и b )…

что касается задачи, то она в том чтобы пощупать что сильнее Математика Вольфрама или Питон, поэтому и смотрю предельные возможности Питона. А Математику Вольфрама (если Питон “победит”) тогда можно как интерфейс для Питона использовать (согласовав их )



Отредактировано (Июль 9, 2009 00:27:36)

Офлайн

#7 Июль 9, 2009 00:11:01

pytol
От:
Зарегистрирован: 2009-07-08
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

ограничение встроено в Питон или из-за железа?

slivlen
pytol написал:
—————————————————————–
отсается вопрос - какими инструментами проследить
———————————————————————–
Для начала попробуй отследить системными средствами объем занятой/свободной оперативки и свопа перед моментом ошибки.
диспетчер задач Винды кое что показывает…. но я бы хотел освоить те средства, что есть для этого в Питоне,
какими Питоновыми средствами надо воспользоваться для этого вопроса?



Офлайн

#8 Июль 9, 2009 00:15:35

pytol
От:
Зарегистрирован: 2009-07-08
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

ограничение встроено в Питон или из-за железа?

Ferroman
Я бы ещё раз посоветовал пересмотреть подход к задаче вообще. Может есть математическое решение, не требующее такого количества ресурсов, или, как минимум сильно его уменьшая.
Делитесь задачей - может что-то придумаем.
думаю что не ошибусь - на форуме два типа вопросов - как решить конкретную задачу (которую и не в питоне часто можно сделать) и второй - вопросы о самом Питоне, каковы его возможности, как он устроен и т.п. - вот мои вопросы относятся ко второму типу! Это тоже очень важные вопросы…



Офлайн

#9 Июль 9, 2009 00:52:10

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

ограничение встроено в Питон или из-за железа?

pytol
все к тому же… генератор списков (где то сказано) эквивалентен коду с циклами, так ли это?
да
pytol
что же все-таки нет эквивалентности этих приемов программирования… !!!???
они эквиваленты с точки зрения результата, который продуцируют.



Офлайн

#10 Июль 9, 2009 02:18:04

pytol
От:
Зарегистрирован: 2009-07-08
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

ограничение встроено в Питон или из-за железа?

Daevaorn
они эквиваленты с точки зрения результата, который продуцируют.
вопрос в том, что ТАК понимаемой эквивалентности недостаточно, одинаковый результат могут давать два алгорифма один затратный (плохой , длинный, глупый и т.п.), а другой быстрый и “дешевый”,
к тому же, когда есть два разных алгорифма (дающие в случае Питона разный байт-код) то крайне сложно доказать, что они в вашем смысле эквивалентны , а может на каких-нибудь данных они дадут разный результат, вы же не можете перебрать все виды входных данных… , так что ваше “да” - только предположение, мне кажется, что скорее всего в вашем смысле эти конструкции неэквивалентны где то дают разные резултаты - для уточнения надо смотреть грамматику и во что код на Питоне превращает интерпретатор…
В книжке Лессы нашел на стр. 64 ("Разработка Веб приложений на Питон 2001 г.) так прямо написано, что генератор более эффективная конструкция… гм..



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version