Создание списков и словарей

Рейтинг: 0Ответов: 1Опубликовано: 27.11.2014

Здравствуйте!

У меня есть список, состоящий из, допустим, 5000 элементов. Создал я его с помощью цикла for или генератора списка. После заполнения значениями я могу обращаться к любому из них, но как сделать, чтобы не запускать скрипт каждый раз и заполнять список, а записать его один раз и потом либо дополнять, либо править и чтобы была возможность импорта в другие модули? Потому что запуская скрипт, создавая список из n-го количества элементов - это очень долго. Может, в таком случае необходимо пользоваться базами данных? Прошу прощения, если неясно объяснил суть вопроса. :)

Ответы

▲ 3Принят

Если создавать список из 5000 (маленькое число) элементов слишком долго при старте программы, то можно попробовать оптимизировать её производительность или считывать уже посчитанные данные с диска, сети и т.д., если это занимает приемлемое время, или просто держать программу всё время запущенной (почему нет).

Можно использовать разные форматы для сохранения:

  • json -- простой человеко, машино-читаемый формат, понимаемый многими языками;
  • sqlite3 -- реляционная база данных в одном файле;
  • pickle -- удобный, поддерживает многие Питон-объекты, как есть, что может приводить к проблемам с разными версиями программы (если классы поменялись). Непереносим и небезопасен (может привести к исполнению произвольного кода);
  • shelve -- как словарь, но на диске (использует pickle внутри).

чтобы была возможность импорта в другие модули

Можно просто объект глобальный импортировать (сам список или прокси, с определённым интерфейсом, например, чтобы запретить модификацию другими модулями):

from source_module import your_list_proxy

item = your_list_proxy[index]

Подскажите еще, пожалуйста, а возможно ли списки записывать в таблицы postresql?

@Piroru: возможно. Существует несколько способов, например, каждый элемент списка в свою строку в таблице (или даже несколько таблиц) или весь список как одна json колонка. Какой вариант выбрать, заслуживает отдельного вопроса (ещё вопрос, какую ORM использовать или использовать ли вообще). Что может помочь ответить на вопрос: что за список, какие операции с ним необходимо производить, как часто, какие требования к производительности, переносимости на разные системы, возможности по установке Питон-пакетов с Pypi.