По сути ваше решение верное. Но есть пара замечаний:
1. По смыслу задачи неразумно обрезать сами заголовки. Т.е. в самой статье потом заголовок будет целиком и лишняя переменная, которая обрезана и содержит многоточие - просто лишнее. Сокращённый заголовок надо просто вывести, но нигде не сохранять.
2. Вывод в виде print('\n'.join(lst)) - это какое-то безумие. Зачем все строки всех заголовков соединять в одну строку? Один заголовок - это один элемент списка, самостоятельная единица. Если надо вывести элементы построчно, то
print(*lst,sep='\n')
3.* Значение N в виде переменной не требуется. Оно используется один раз в генераторе, чтобы ограничить количество вводимых переменных.
Т.е. ваш код можно ужать вот так:
L = int(input())
data = [input() for _ in range(int(input()))]
for d in data:
print(d[:L-3]+['','...'][len(d)>L])
Мне кажется мой код слишком замудрен:
lenght = int(input())
n = int(input())
lst = []
for i in range(n):
sentence = input()
if len(sentence) > lenght:
lst.append(sentence[:lenght - 3])
lst[i] += '...'
else:
lst.append(sentence)
print('\n'.join(lst))