如何从一个列表中删除多个元素?

问题描述 投票:1回答:2

我有一个列表元素的列表。在我的例子中,我使用的是dlib tracker。将所有检测到的跟踪器附加到一个列表中。我正试图从列表中删除一些跟踪器。为了简单起见,我有一个像下面这样的列表。

[[1, 2, 3], [4,5,6], [7, 8,9], [2,54,23], [4,12,5], [3,2,6]]

我想在列表中发现4个元素时就删除列表项。

为此,我使用了下面的代码段来找到索引来删除元素。

t=  [[1, 2, 3], [4,5,6], [7, 8,9], [2,54,23], [4,12,5], [3,2,6]]
del_item = []
idx = 0
for item in t:
    if 4 in item:
        del_item.append(idx)
    idx+=1
print(del_item)

到目前为止还不错。我有要删除的元素的索引。我被卡在了如何删除列表中的多个索引?

预期的输出。

[[1, 2, 3], [7, 8,9], [2,54,23], [3,2,6]]
python python-3.x list dlib
2个回答
1
投票

你可以使用list comprehension简单地用一行来完成。

trackers = [[1, 2, 3], [4,5,6], [7, 8,9], [2,54,23], [4,12,5], [3,2,6]]
filtered = [x for x in trackers if 4 not in x]
print(filtered)

输出。

[[1, 2, 3], [7, 8,9], [2,54,23], [3,2,6]]

1
投票

这个任务可以用list comprehension(如图所示)来完成,也可以用... filter:

t = [[1, 2, 3], [4,5,6], [7, 8,9], [2,54,23], [4,12,5], [3,2,6]]
tclean = list(filter(lambda x:4 not in x, t))
print(tclean)  # [[1, 2, 3], [7, 8, 9], [2, 54, 23], [3, 2, 6]]

使用 filter 你需要函数--在本例中,我使用lambda来制作无名函数,尽管也可以使用普通函数。filter 返回iterable,所以我使用了 list 上得到列表。

© www.soinside.com 2019 - 2024. All rights reserved.