Наверное, надо
проверять элемент исходного списка, является ли он списком, и только тогда распаковывать?
Если уровень вложенности у нас один, то так и написать
chained = []
for item in posl:
if isinstance(item, list):
for subitem in item:
chained.append(subitem)
else:
chained.append(item)
Это будет самый кондовый алгоритм. Задачу можно реализовать и короче, и оптимальнее. Но при изучении программирования
надо сначала научиться составлять самому простейшие алгоритмы и их реализовывать, а не просто пытаться использовать по очереди какие-то магические заклинания - авось какое-то сработает. А если не сработает - то идти на Хабр, чтобы тебе его написали.
Любой красивый код следует применять только тогда, когда ты понимаешь, как он работает, что делает внутри. А если не понимаешь, то лучше сначала разобраться, реализовать тот же алгоритм руками. Иначе ты будешь не программист, а обезьяна с гранатой.
Если вложенность неограниченная, то придется познакомиться с таким понятием, как
рекурсия.