var/list/a = list(1, 2, 3, 4) + list(2, 4) // (1,2,3,4,2,4)
var/list/b = list(1, 2, 3) | list(2, 4) // (1,2,3,4)
var/list/c = a - 4 // (1,2,3,4,2)
var/list/d = b - 4 // (1,2,3)
I submit that a builtin operator or list/proc such as the following may belong.
/proc/conclusively_remove(var/list/l, var/s)
. = l.Copy()
while(s in .)
. -= s
list("hi", "bye", "hi", "bye", "hi", "bye") ^= list("hi")