# python – Check if two unordered lists are equal

## python – Check if two unordered lists are equal

Python has a built-in datatype for an unordered collection of (hashable) things, called a `set`

. If you convert both lists to sets, the comparison will be unordered.

```
set(x) == set(y)
```

EDIT: @mdwhatcott points out that you want to check for duplicates. `set`

ignores these, so you need a similar data structure that also keeps track of the number of items in each list. This is called a multiset; the best approximation in the standard library is a `collections.Counter`

:

```
>>> import collections
>>> compare = lambda x, y: collections.Counter(x) == collections.Counter(y)
>>>
>>> compare([1,2,3], [1,2,3,3])
False
>>> compare([1,2,3], [1,2,3])
True
>>> compare([1,2,3,3], [1,2,2,3])
False
>>>
```

If elements are always nearly sorted as in your example then builtin `.sort()`

(timsort) should be fast:

```
>>> a = [1,1,2]
>>> b = [1,2,2]
>>> a.sort()
>>> b.sort()
>>> a == b
False
```

If you dont want to sort inplace you could use `sorted()`

.

In practice it might always be faster then `collections.Counter()`

(despite asymptotically `O(n)`

time being better then `O(n*log(n))`

for `.sort()`

). Measure it; If it is important.

#### python – Check if two unordered lists are equal

```
sorted(x) == sorted(y)
```

Copying from here: Check if two unordered lists are equal

I think this is the best answer for this question because

- It is better than using counter as pointed in this answer
- x.sort() sorts x, which is a side effect. sorted(x) returns a new list.