Вообще код немного странноватый: раскрыть списки можно одной строкой, если это список списков, а если нет - то этот код работать не будет.
Могу порекомендовать вот это.
Flatten для списков в списке:
>>> list_of_items = [[1,2], [3], []]
>>> import itertools
>>> chain = itertools.chain(*list_of_items) # Chain раскрывает внутренние списки
>>> print(list(chain))
[1, 3, 4]
Flatten для многоуровнего списка списков:
list_of_items = [[1, [2]], [3, [[4]]], [], [5, [6, 7]]]
def iter_flatten(root):
if isinstance(root, (list, tuple, set)): # если root - это список, кортеж или множество
for element in root: # перебираем элементы из итеррируемого элемента
for e in iter_flatten(element): # вызываем саму себя и перебираем элементы
yield e # возвращаем элемент
else: # если root не список, не кортеж и не множество
yield root # возвращаем элемент
Функция вернет генератор (читайте про yield). Для преобразования в список просто поставьте list.
print list(iter_flatten(list_of_items)) # Вернет [1, 2, 3, 4, 5, 6, 7]