The best answers to the question “Python list subtraction operation” in the category Dev.

__QUESTION__:

I want to do something similar to this:

```
>>> x = [1,2,3,4,5,6,7,8,9,0]
>>> x
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> y = [1,3,5,7,9]
>>> y
[1, 3, 5, 7, 9]
>>> y - x # (should return [2,4,6,8,0])
```

But this is not supported by python lists

What is the best way of doing it?

__ANSWER__:

Use set difference

```
>>> z = list(set(x) - set(y))
>>> z
[0, 8, 2, 4, 6]
```

Or you might just have x and y be sets so you don’t have to do any conversions.

__ANSWER__:

Use a list comprehension:

```
[item for item in x if item not in y]
```

If you want to use the `-`

infix syntax, you can just do:

```
class MyList(list):
def __init__(self, *args):
super(MyList, self).__init__(args)
def __sub__(self, other):
return self.__class__(*[item for item in self if item not in other])
```

you can then use it like:

```
x = MyList(1, 2, 3, 4)
y = MyList(2, 5, 2)
z = x - y
```

But if you don’t absolutely need list properties (for example, ordering), just use sets as the other answers recommend.

__ANSWER__:

That is a “set subtraction” operation. Use the set data structure for that.

In Python 2.7:

```
x = {1,2,3,4,5,6,7,8,9,0}
y = {1,3,5,7,9}
print x - y
```

Output:

```
>>> print x - y
set([0, 8, 2, 4, 6])
```

__ANSWER__:

if duplicate and ordering items are problem :

`[i for i in a if not i in b or b.remove(i)]`

```
a = [1,2,3,3,3,3,4]
b = [1,3]
result: [2, 3, 3, 3, 4]
```