Конечно, нужно, ведь мы ожидаем конкретные типы задавая параметры для функции. Можно проверять соответствие типам вручную, но есть альтернативный, более удобный и красивый, подход -- использование библиотеки pydantic, которая специализируется на валидации, а именно декоратор validate_arguments. Валидация помогает на ранних и даже на поздних этапах дебажить ошибки в логике вашего кода. Это очень помогает, даже если на проекте один человек.
Такие сложные вложенные конструкции лучше никогда не использовать, их очень трудно читать. К слову, list comprehensions здесь никакой производительности не добавит. Лучше сделать код более читабельным:
n = int(input())
w = []
count = int(input())
for _ in range(count):
w.append(input())
for i in w:
if 1 <= n <= len(i):
print(i[n - 1], end='')