Несколько вариантов:
filter(lambda x: len(x) > 0, list1) # Doesn't work with number types
filter(None, list1) # Filters out int(0)
filter(lambda x: x==0 or x, list1) # Retains int(0)
пример сеанса:
Python 2.7.1 (r271:86832, Nov 27 2010, 17:19:03) [MSC v.1500 64 bit (AMD64)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> list1 = [[], [], [], [], [], 'text', 'text2', [], 'moreText']
>>> filter(lambda x: len(x) > 0, list1)
['text', 'text2', 'moreText']
>>> list2 = [[], [], [], [], [], 'text', 'text2', [], 'moreText', 0.5, 1, -1, 0]
>>> filter(lambda x: x==0 or x, list2)
['text', 'text2', 'moreText', 0.5, 1, -1, 0]
>>> filter(None, list2)
['text', 'text2', 'moreText', 0.5, 1, -1]
>>>
'' '! = [] ', Поэтому' .remove' не работал. Но это все равно плохое решение (либо вы проверяете, есть ли перед этим '' [] в списке1' - «O (n ** 2)», либо уловите ошибку, которую он выбрал иначе - уродливый). – delnan
так удивительно, когда вы нашли, что хотя ваш вопрос не является обычным явлением, но кто-то давно опубликовал его, и он был красиво ответил! Я люблю SO –