Удалить несколько элементов в списке Python один раз - PullRequest
0 голосов
/ 17 января 2019

(с использованием Python 3)

Данный список называется numList: [1,1,2,2,3,3,3,4]. Я хочу удалить ровно один экземпляр «1» и «3» из numList. Другими словами, я хочу функцию, которая превратит numList в: [1,2,2,3,3,4]. Какая функция позволит мне удалить X элементов из списка Python один раз для каждого элемента, который я хочу удалить? (Элементы, которые я хочу удалить, гарантированно существуют в списке)

Для ясности приведу больше примеров:

[1,2,3,3,4] Удалить 2 и 3 [1,3,4]

[3,3,3] Удалить 3 [3,3]

[1,1,2,2,3,4,4,4,4] Удалить 2, 3 и 4 [1,1,2,4,4,4]

Я пытался сделать это:

numList = [1,2,2,3,3,4,4,4]

remList = [2,3,4]

для x в remList:

 numList.remove(x)

Это превращает numList в [1,2,3,4,4], что я и хочу. Однако это имеет сложность:

O ((Len (numList)) ^ (Len (remList)))

Это проблема, потому что remList и numList могут иметь длину 10 ^ 5. Программа займет много времени для запуска. Есть ли встроенная функция, которая делает то, что я хочу быстрее?

Кроме того, я бы предпочел оптимальную функцию, которая может выполнять эту работу с точки зрения пространства и времени, поскольку программа должна выполняться менее чем за секунду, а размер списка велик.

1 Ответ

0 голосов
/ 17 января 2019

Ваш подход:

for x in rem_list:
    num_list.remove(x)

интуитивно понятен, и если списки не будут очень большими, я мог бы сделать это, потому что его легко читать.

Одна альтернатива будет:

result = []
for x in num_list:
    if x in rem_list:
        rem_list.remove(x)
    else:
        result.append(x)

Это будет O (len (rem_list) ^ len (num_list)) и быстрее, чем первое решение, если len (rem_list)

Если бы rem_list гарантированно не содержал дубликатов (согласно вашим примерам), вы могли бы вместо этого использовать набор, и сложность была бы O (len (num_list)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...