абенобаши

топ 100 блогов amarao_san02.01.2010 Оставляя в стороне всякие сервисные оболочки (типа командной строки и обработки ошибок), реальный код выглядит так:
from_list=frozenset(sys.argv[2:-1])
history=cPickle.load(file(argv[1]))
to_move=from_list-history
[sys.rename(f, argv[-1]) for f in to_move]
cPickle.dump(history | to_move,file(argv[1],"w"))


Главное в этом коде (что заставляет меня хихикать от восторга - это операция to_move = from_list-history.

Это такая миленькая операция из теории множеств, которая возвращает список элементов, отсутствующий в "вычитаемом" списке. Сам вычитаемый список может быть сколь угодно большим, это не важно.

Ну и вдогонку операция history|to_move, возвращающая результат пересечения множеств. С сохранением уникальности элементов.

Заметим, это МНОГО эффективнее, чем "ручной" код вида:

[sys.rename(f, argv[-1]) for f in to_move if f not in from_list]

Причём эффективнее не потому, что большая часть кода выносится из интерпретируемого режима, а именно алгоритмической оптимизацией - если history будет исчисляться миллионами строк, то каждое 'in' бо-бо, что на Си, что на питоне.

Не, множества меня реально прут:

Список для сохранения в файл выглядит так:

return memory | (to_move - errors)

errors - set(), в который в случае ошибки делается errors.add(f)

Оставить комментарий

Архив записей в блогах:
Забавная акция одного австралийского банка. Дерево было украшено 5-ти долларовыми купюрами. Задача - посмотреть реакцию прохожих. Удивительно, но первые 100 человек просто прошли ...
Как правило, я в промо-посты из своей ленты не то, что не заглядываю, я их даже не замечаю, как не замечаю рекламных баннеров за окном маршрутки. Нет, сам факт их наличия я, конечно, краем сознания улавливаю. Но что именно там изобрАжено... под пытками не воспроизведу. Почему вдруг меня ...
(Навеяно беседами о будущем и о перспективах моей профессии.) Ещё в 90-е годы мне многие говорили, что профессия переводчика скоро умрёт: её вытеснит машинный перевод. С тех пор вот уже почти 20 лет мы кое-как держимся на плаву, но долго ли это будет ...
Брать интервью у президента России – непосильная задача для западных СМИ, справиться с которой способны «не только лишь все». Причина этого в том, что в ответ на пропагандистские ...
По мнению администратора сайта politikus.ru Дениса Кораблёва, в последнее время многие важные высказывания Президента РФ Владимира Путина не попадают в выпуски новостей. Первая  цитата  взята из слов, произнесённых при посещении Еврейского музея и Центра толерантности:  ...