Python:如何从列表中删除空列表?

San*_*yBr 60 python list

我有一个包含空列表的列表:

list1 = [[], [], [], [], [], 'text', 'text2', [], 'moreText']
Run Code Online (Sandbox Code Playgroud)

如何删除空列表以便我得到:

list2 = ['text', 'text2', 'moreText']
Run Code Online (Sandbox Code Playgroud)

我尝试了list.remove(''),但这不起作用.

Sve*_*ach 93

尝试

list2 = [x for x in list1 if x != []]
Run Code Online (Sandbox Code Playgroud)

如果你想摆脱所有"麻痹"的东西,比如空字符串,空元组,零,你也可以使用

list2 = [x for x in list1 if x]
Run Code Online (Sandbox Code Playgroud)

  • @David:[List comprehensions](https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions)和[Generator expressions](https://docs.python.org/3/tutorial/ classes.html#发电机表达式).还有字典理解和集合理解. (4认同)
  • +1表示想起的另一种方式以及它的不同之处。 (2认同)

lun*_*orn 62

您可以使用filter()而不是列表理解:

list2 = filter(None, list1)
Run Code Online (Sandbox Code Playgroud)

如果None用作第一个参数filter(),则过滤掉给定列表中的每个值,该列表False位于布尔上下文中.这包括空列表.

它可能比列表理解稍快,因为它只在Python中执行单个函数,其余的在C中完成.

  • @ MattO'Brien b/c很多Python程序员都避免使用`filter()`,以及`lambda`,`map()`和`reduce()`; 这包括[Guido他自己](http://www.artima.com/weblogs/viewpost.jsp?thread=98196),虽然这个帖子有点旧.我倾向于更喜欢列表推理b/c清晰度通常比使用这些方法和`lambda`运算符的轻微加速更重要.话虽这么说,这个案例是微不足道的b/c很清楚程序员的意图是什么. (3认同)
  • 在Python3中我认为这必须修改为:list2 = list(filter(None,list1)).以防万一使用Python3的新手想知道为什么这对他们不起作用:) (3认同)

Imr*_*ran 6

调用filterNone将过滤掉列表中的所有falsey值(一个空列表是)

list2 = filter(None, list1)
Run Code Online (Sandbox Code Playgroud)


use*_*312 5

>>> list1 = [[], [], [], [], [], 'text', 'text2', [], 'moreText']
>>> list2 = [e for e in list1 if e]
>>> list2
['text', 'text2', 'moreText']
Run Code Online (Sandbox Code Playgroud)