абенобаши

топ 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)

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

Архив записей в блогах:
Реакция организма на проведенное стоматологом лечение у разных людей разная. Но ...
Извините, но я балдею Насколько я уже почитал в ленте, у украинского руководства хватило ума уже дать понять, что теракт на Крымском мосту -- это дело рук Украины Хотите узнать, почему автор сего журнала так забалдел -- заглядывайте под кат Так вот, тем самым украинские спикеры от ...
"Традиционно многие россияне отмечают Новый Год в Подмосковье. Новый Год в Подмосковье — это, прежде всего, пушистый, белый снег, хрустально чистый воздух, праздничная елка и любимые зимние забавы: лыжи, коньки, снегоходы, тюбинг и уличные ...
Поскольку в Бакуриани не было ТВ-каналов, кроме двух, дети выучили наизусть все ...
www.navoine.ru Джемаль Орхан (Африка): Ливия фронта Орхан Джемаль провел три дня на передовой среди противников Муамара Каддафи.  Теперь уже сомнений нет: война в Ливии — это надолго. Как воюют отряды оппозиции? Что творится в столице ...