Python

Первый элемент списка — 1 буква 'а', последний — 33 буквы 'я'. Используй метод append().

Напиши программу, которая печатает список. Первый элемент списка — 1 буква 'а', последний — 33 буквы 'я'. Используй метод append().
В русском алфавите 33 буквы. Каждую нужно вывести в списке такое количество раз, которое соответствует её позиции.
Аппенд здесь нужен только дилетантам, умеющим генерировать лишь неполные решения проблем. А код должен быть совершенным во всём.

Вот, например, небольшой шажок в нужную сторону:
 def char_range(s, e): return map(chr, range(ord(s), ord(e) + 1))
alpha = sum((list(char_range('а', 'е')), ['ё'], list(char_range('ж', 'я'))), [])
print(*(c * i for i, c in enumerate(alpha, 1)), sep = '\n')
Но здесь плохо то, что материализуется список букв, который не нужен, пробег же выполняется один раз.

Список можно заменить на итератор, создаваемый функцией chain:
 from itertools import chain
def char_range(s, e): return map(chr, range(ord(s), ord(e) + 1))
alpha = chain.from_iterable((char_range('а', 'е'), ('ё',), char_range('ж', 'я')))
print(*(c * i for i, c in enumerate(alpha, 1)), sep = '\n')

И ещё один шажок: зачем нам списочные выражения, когда можно написать простенький морфизм:
 from itertools import chain, starmap
def char_range(s, e): return map(chr, range(ord(s), ord(e) + 1))
alpha = chain.from_iterable((char_range('а', 'е'), ('ё',), char_range('ж', 'я')))
print(*starmap(str.__mul__, map(reversed, enumerate(alpha, 1))), sep = '\n')

Всё же, кое-что в этом решении - лишнее: двойной вызов char_range. Мы же не хотим дублирования кода? Вот вариант, в котором ни один элемент прикладной логики не дублируется:
 from itertools import chain, starmap
def char_range(s, e): return map(chr, range(ord(s), ord(e) + 1))
alpha = chain.from_iterable(starmap(char_range, (('а', 'е'), ('ё',) * 2, ('ж', 'я'))))
print(*starmap(str.__mul__, map(reversed, enumerate(alpha, 1))), sep = '\n')
Правда, тут лишний раз вызывается char_range, но средний вызов вернёт пустой итератор, так что это - не проблема.

И наконец, можно избавиться от starmap:
 from itertools import chain, count
def char_range(s, e): return map(chr, range(ord(s), ord(e) + 1))
alpha = chain.from_iterable(map(char_range, ('а', 'ё', 'ж'), ('е', 'ё', 'я')))
print(*map(str.__mul__, alpha, count(1)), sep = '\n')
МХ
Марат Хусаинов
87 571
Лучший ответ
 # в ord (номер символа в таблице Юникода) буква "ё" идет не в общем порядке, а отдельно, 
# так что количество букв "я" будет не 33, а 32
res = []
n = ord('а')
for i in range(1,33):
res.append(chr(n) * i)
n += 1
print(res))
Киселев Евгений не выводит букву ё