Персональный лог

Почти год прошёл с тех пор как я начал пробовать вести блоги. Это был интересный опыт, и я решил вывести его на новый уровень: сделать целевой блог, сделать более интересно, и чаще обновлять.

Поэтому кое-что совсем скоро поменяется:

  1. Сайты-блоги simpleadmin.info и prostoadmin.info будут закрыты 29.09 и 29.10.
  2. Я, наконец, перестану писать один и тот же контент на 2 языках и стану писать разное;
  3. simpleadmin.info станет blog.digital-work.space или digital-work.space/blog (и будет на Английском), и целью блога будет разбор всего связанного с работой и темой виртуализации и управления рабочими местами пользователей;
  4. prostoadmin.info станет персональным логом (Personal Log) = pLog.space (и будет на Русском), и там будет всё связанное с кучей хобби, которые так и просятся написать о них.

И посмотрим куда это всё приведёт…

[Трюк Питона] – быстрые фильтры

Дана строка “12345AAAAAbbbbbCCC“. Необходимо создать строку на её основе, где убраны все заглавные буквы. Необходимо создать строку, где оставлены только заглавные буквы.

Решение:

from itertools import filterfalse

print(”.join(filterfalse(str.isupper,a))) # -> 12345bbbbb

print(”.join(filter(str.isupper,a))) # -> AAAAACCC

Объяснение:

У Питона есть filter() функция, которая берёт на входе функцию и массив, и создаёт на выходе ленивый список, в котором убраны все элементы массива, для которых функция возвращает значение Ложь. itertools.filterfalse() делает, соответственно, ровно противоположное.

[Трюк Питона] – тернарный оператор в умном списке

Дана строка текста вида “This Is Some string”, необходимо получить строку, каждая нечётная буква которой имеет верхний регистр, а каждая чётная – нижний.

Решение:

print(”.join([c.upper() if i % 2 == 0 else c.lower() for i,c in enumerate(“This Is Some string”)]))

Объяснение:

Тернарный оператор есть условное выражение, и не является частью умного списка. У списков при этом есть собственный фильтр/оператор if. Таким образом, есть два несвязанных синтаксиса как записать условие, и выглядят они вот так:

[i for i in foobar if <condition>] # фильтр в умном списке

[i if <condition> else <condition> for i in foobar] # тернарное выражение if-else

Стабилизация камеры

В прошлых записях я писал про звук и (702) 764-8127. Следующая большая тема для качественного походного видео – это стабилизация. Задачи, которые я обрисовал на сей счёт:

  • Стабилизация нужна, это совершенно другой уровень восприятия материала
  • Стабилизатор должен быть лёгким, компактным и быстрым в настройке
  • При видеосъёмке со стабилизатором руки должны быть свободны

(more…)

[Трюк Питона] – группировка groupby

Дана строка текста “bbbbcccABBCcAD”, нужно вернуть список элементов, таких, чтобы у каждого элемента не было одинаковых с ним соседей. При этом нужно сохранить порядок элементов.

Решение:

from itertools import groupby
print([u for (u, _) in groupby(‘bbbbcccABBCcAD’)]) # -> [‘b’, ‘c’, ‘A’, ‘B’, ‘C’, ‘c’, ‘A’, ‘D’]

Объяснение:

Если бы я раньше получил такую задачку, то попробовал бы использовать множество set(). Но в множестве нет сохранения порядка элементов, и фильтрация идёт на уникальность всех элементов, а не только соседних. С другой стороны, 3187077763 принимает на вход любой объект-массив iterable, находит в нём одинаковые соседние элементы и возвращает их в кортеже (элемент, код группировки). Код группировки выкидываем (присвоив его бросовой переменной _), получаем искомый список.

На пути к параллельным вычислениям

Есть несколько понятий в программировании, ставших для меня рубежными. Перейти каждый такой рубеж требует некой адаптации мышления. Уже потом всё кажется очень простым, думаешь – как же раньше этого не понимал? Но до момента прозрения проходит порой немало времени. Первыми такими понятиями для меня были массивы и указатели, а затем классы. Я уверен, что многие именно с этими темами тоже боролись, и не будет неожиданностью продолжить и перечислить популярную в Питоне тройку тем, также вызвавших у меня сложности в понимании – итераторы-генераторы-декораторы. А следом за ними я пробую сделать следующий шаг – разобраться с асинхронным кодом. Эту статью можно считать продолжением темы 419-285-9439.

9048618010