L'inférence à partir de votre exemple:
x = ['a', 'b']
y = ['b', 'a']
que les éléments de la liste ne sera pas répétée (ils sont uniques) ainsi que hashable (chaînes et autres de certains immuable des objets python), les plus directs et efficaces de calcul de réponse utilise Python builtin ensembles, (qui sont sémantiquement comme la mathématique des ensembles, vous pouvez avoir appris à l'école).
set(x) == set(y)
Comme phihag suggère d'abord, dans le cas où ils sont hashable, mais non unique, de la collections.Counter
travaille aussi sémantiquement comme un multiset, mais il est beaucoup plus lent:
from collections import Counter
Counter(x) == Counter(y) # avoid this
Utilisation
sorted(x) == sorted(y)
si les éléments sont peut être commandé. Cela permettrait de prendre en compte la non-uniques ou non hashable circonstances, mais cela pourrait être beaucoup plus lent que l'utilisation de jeux.
Une analyse empirique de l'expérience en conclut que l'on devrait utiliser le jeu, puis triés. Seuls opter pour une Contre si vous avez besoin d'autres choses comme des décomptes ou à une utilisation ultérieure comme un multiset.:
>>> import random
>>> data = [str(random.randint(0, 100000)) for i in xrange(100)]
>>> data2 = data[:]
>>> def fooset(): return set(data) == set(data2)
...
>>> import collections
>>> def foocount(): return collections.Counter(data) == collections.Counter(data2)
...
>>> def foosort(): return sorted(data) == sorted(data2)
...
>>> import timeit
>>> min(timeit.repeat('fooset()', 'from __main__ import fooset, foocount, foosort'))
21.535013914108276
>>> min(timeit.repeat('foocount()', 'from __main__ import fooset, foocount, foosort'))
147.164559841156
>>> min(timeit.repeat('foosort()', 'from __main__ import fooset, foocount, foosort'))
65.28950691223145