在Python中有效删除列表中的列表

时间:2018-05-08 12:32:57

标签: python

假设您有一个类似l=[[1,2,3],[1,3,4],[1,5,2],[4,2,1]]的列表,并且您想删除l中索引1处有2的每个列表。最有效的方法是什么?目前我使用while循环遍历每个项目并单独检查,但是当列表变长时会占用大量CPU。有没有办法可以使用.remove()函数来简化这个过程?

2 个答案:

答案 0 :(得分:4)

您可以使用list comprehension来过滤您的指定列表。列表理解是将一个列表(实际上任何iterable)转换为另一个列表的优雅方式。

list_updated = [item for item in l if item[1] != 2]

相当于。

result = []
for item in l:
  if item[1] != 2:
    result.append(item)

对于大型列表,您可以使用generator comprehensiongenerator理解是列表理解的 lazy 版本。

list_updated = (item for item in l if item[1] != 2)

使用generators,您可以使用next方法查看结果。

答案 1 :(得分:3)

您可以使用列表推导来过滤内部列表,然后分配回原始

>>> l = [[1, 2, 3], [1, 3, 4], [1, 5, 2], [4, 2, 1]]
>>> l = [i for i in l if i[1] != 2]
>>> l
[[1, 3, 4], [1, 5, 2]]