У вас есть смесь списков и строк, которые являются итеративными. Здесь вам нужно явно проверить списки и либо набрать или использовать стек:
def clean_nested(l):
cleaned = []
for v in l:
if isinstance(v, list):
v = clean_nested(v)
if not v:
continue
cleaned.append(v)
return cleaned
Демонстрация:
>>> mynestedlist = [[[], [], [], ['Foo'], [], []], [[], ['Bar'], [], []], ['FOO'], 'BAR']
>>> clean_nested(mynestedlist)
[[['Foo']], [['Bar']], ['FOO'], 'BAR']
Обратите внимание, что это решение удаляет все, кроме самого внешнего списка если в пустых списках есть пустые списки:
>>> nested_empty = [[[],[],[],[],[],[]],[[],['Bar'],[], []], ['FOO'], 'BAR']
>>> clean_nested(nested_empty)
[[['Bar']], ['FOO'], 'BAR']
>>> all_nested_empty = [[[],[],[],[],[],[]],[[],[],[], []], []]
>>> clean_nested(all_nested_empty)
[]