SomethingButNotNickName
Зачем третья строка?
Если у кого-то запрашиваемый год есть, а кого-то запрашиваемого года нет, то того, у кого года нет, не надо включать в результат и обрабатывать не надо. А того, у кого год есть, надо включить в результат, только перед этим ещё обработать там, чтобы результат был простым и чтобы не нужно было потом копаться в нём, чтобы что-то достать.
SomethingButNotNickName
Но в случае решения marvellik'a этот список реально существует, под него выделена переменная, к нему можно обратиться после окончания работы функции. А у py.user.next списку не дано имени, он существует только внутри функций, и насколько я понимаю, после окончания работы функции стирается из памяти.
При сортировке список всё равно будет воссоздан, потому что сортировка через sorted() не может отсортировать на лету, ей нужно обязательно все элементы перебрать в каждом случае. Поэтому там возвращается список всегда, даже если ты подавал итератор какой-нибудь.
Мой вариант рациональнее потому, что там всё разделено по отдельным функциям. То есть за то, как выводится что-то, отвечает отдельная функция. За то, как сортируется что-то, отвечает отдельная функция. За то, как фильтруется что-то, отвечает отдельная функция. Допустим, тебе надо поменять вывод, например, - ты берёшь функцию, отвечающую за вывод, выдёргиваешь её и переписываешь только её; остальную программу тебе не надо трогать - всё работает как часы. Или тебе надо поменять сортировку - ты точно так же берёшь функцию, где происходит сортировка, и переделываешь только её. Ну и так далее.
А
marvellik, если ему надо будет что-то из этого поменять, он сначала будет искать, где это находится в коде. А код бывает свой, а бывает не свой, а бывает даже твой, но который ты писал пять лет назад и в котором ты даже не можешь вспомнить, что это за код вообще и про что он и что там было тогда. Вот нашёл, к примеру, место через час, очертил его и решил менять. И тут оказывается, что от этого места зависит ещё какое-то место и из-за этого его тоже надо менять. И вот в конце выясняется, что менять надо вообще всё, потому что одно зависит от другого, а другое - от третьего. И заканчивается всё тем, что там 5000 строк и надо либо всё писать заново, либо ничего нельзя трогать, потому что всё остальное сломается. И в результате он начинает (обычно так происходит) вставлять хаки в код, которые в итоге всё ещё больше усугубляют. Ну это как идёт инженер по плохо построенному зданию, видит, что балка оторвалась, берёт верёвку и приматывает эту балку, потому что перестраивать это всё времени нет. А потом весь дом покрывается такими примотками, потому что постоянно что-то отрывается, и потом этот дом спокойненько складывается. Вот его код - это такой дом, в котором балки уже на соплях держатся, их ещё даже не приматывали, потому что дом только построили, его ещё никто не юзал. А при использовании оно полезет всё - надо то поменять, надо это поменять, надо туда это подсоединить, надо сюда это подсоединить.