Данный список a = [1, 2, 2, 3]
и его подписок b = [1, 2]
найдите список, дополняющий b таким образом, что sorted(a) == sorted(b + complement)
. В приведенном выше примере complement
будет списком [2, 3]
.
Заманчиво использовать понимание списка:
complement = [x for x in a if x not in b]
или устанавливает:
complement = list(set(a) - set(b))
Однако оба этих пути вернут complement = [3]
.
Очевидным способом сделать это будет:
complement = a[:]
for element in b:
complement.remove(element)
Но это чувствует себя глубоко неудовлетворительным и не очень Pythonic. Я пропустил очевидную идиому или это так?
Как указано ниже, что касается производительности, это O(n^2)
Есть ли более эффективный способ?