如何从列表中删除每个子列表的所有出现

5 浏览
0 Comments

如何从列表中删除每个子列表的所有出现

我有两个列表:

big_list = [2, 1, 2, 3, 1, 2, 4]
sub_list = [1, 2]

我想从big_list中删除所有的sub_list出现。

结果应该是[2, 3, 4]

对于字符串,你可以使用这个:

'2123124'.replace('12', '')

但据我所知,这不能用于列表。

这不是从列表中删除子列表的重复,因为我想从big_list中删除所有的子列表。在其他问题中,结果应该是[5,6,7,1,2,3,4]

更新:为了简单起见,我在这个例子中使用了整数。但是列表项可以是任意对象。

更新2:

如果big_list = [1, 2, 1, 2, 1]sub_list = [1, 2, 1]

我希望结果是[2, 1](就像'12121'.replace('121', '')

更新3:

我不喜欢从StackOverflow中复制粘贴源代码到我的代码中。这就是为什么我在software-recommendations创建了第二个问题:https://softwarerecs.stackexchange.com/questions/51273/library-to-remove-every-occurrence-of-sub-list-from-list-python

更新4:如果你知道一个库可以通过一个方法调用来实现这个功能,请将其写成答案,因为这是我首选的解决方案。

测试应该通过这个测试:

def test_remove_sub_list(self):
    self.assertEqual([1, 2, 3], remove_sub_list([1, 2, 3], []))
    self.assertEqual([1, 2, 3], remove_sub_list([1, 2, 3], [4]))
    self.assertEqual([1, 3], remove_sub_list([1, 2, 3], [2]))
    self.assertEqual([1, 2], remove_sub_list([1, 1, 2, 2], [1, 2]))
    self.assertEquals([2, 1], remove_sub_list([1, 2, 1, 2, 1], [1, 2, 1]))
    self.assertEqual([], remove_sub_list([1, 2, 1, 2, 1, 2], [1, 2]))

0