У меня есть два списка:
big_list = [2, 1, 2, 3, 1, 2, 4]
sub_list = [1, 2]
Я хочу удалить все вхождения sub_list в big_list.
результат должен быть [2, 3, 4]
Для строк вы можете использовать это:
'2123124'.replace('12', '')
Но AFAIK это не работает для списков.
Это не дубликат удаления подписок из списка, так как я хочу удалить все под-списки из большого списка. В другом вопросе результат должен быть [5,6,7,1,2,3,4]
.
Обновление. Для простоты я взял целые числа в этом примере. Но элементы списка могут быть произвольными объектами.
Update2:
если big_list = [1, 2, 1, 2, 1]
и sub_list = [1, 2, 1]
, я хочу, чтобы результат был [2, 1]
(например, '12121'.replace('121', '')
)
Update3:
Мне не нравится копировать + вставлять исходный код из StackOverflow в мой код. Вот почему я создал второй вопрос по рекомендациям программного обеспечения: https://softwarerecs.stackexchange.com/info/51273/library-to-remove-every-occurrence-of-sub-list-from-list-python
Update4: если вы знаете библиотеку для вызова этого метода, напишите ее как ответ, так как это мое предпочтительное решение.
Тест должен пройти этот тест:
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]))