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