marvellik
бить может каждый а вот объяснить за что единицы.
Смотрите, ваш код можно развернуть в такой
c = 0
n = int(input())
res = []
for i in range(1, n+1):
for j in range(1, i+1):
res.append(i)
c += 1
print(res[:n])
print("counts", c)
вот что мы получим
10
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
('counts', 55)
для получения десяти членов последовательности цикл выполнился 55 раз. Это нерационально.
Можно оптимизировать, например так
c = 0
n = int(input())
res = []
for i in range(1, n + 1):
if c == n:
break
for j in range(1, i+1):
res.append(i)
c += 1
if c == n:
break
print(res[:n])
print("counts", c)
10
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
('counts', 10)
Простота питоньих языковых конструкций не означает, что их нужно бездумно применять не заботясь о качестве алгоритма. Ну и вообще, я бы не советовал вам увлекаться однострочниками: явное лучше неявного. Когда вам достанется в наследство чужой код на несколько десятков тысяч строк вот таких вот компактных, но плохо читаемых решений, тогда вы меня вспомните