La meilleure façon de procéder consiste à trier les listes et à les comparer. (En utilisant Counter
ne fonctionnera pas avec des objets qui ne sont pas hachables). C'est simple pour les entiers :
sorted(a) == sorted(b)
La situation est un peu plus délicate avec les objets arbitraires. Si vous vous souciez de l'identité de l'objet, c'est-à-dire de savoir si l'objet même se trouvent dans les deux listes, vous pouvez utiliser la fonction id()
comme clé de tri.
sorted(a, key=id) == sorted(b, key==id)
(Dans Python 2.x, vous n'avez pas besoin de l'option key=
car on peut comparer n'importe quel objet à n'importe quel objet. L'ordre est arbitraire mais stable, et fonctionne donc très bien pour cet objectif ; l'ordre des objets n'a pas d'importance, il suffit que l'ordre soit le même pour les deux listes. Dans Python 3, cependant, la comparaison d'objets de types différents est interdite dans de nombreuses circonstances - par exemple, vous ne pouvez pas comparer des chaînes de caractères à des entiers - donc si vous avez des objets de types différents, il vaut mieux utiliser explicitement l'ID de l'objet).
Si vous souhaitez comparer les objets de la liste par valeur, d'autre part, il faut d'abord définir ce que signifie la "valeur" pour les objets. Il faut ensuite trouver un moyen de fournir cette valeur comme clé (et pour Python 3, comme type cohérent). Un moyen potentiel qui fonctionnerait pour un grand nombre d'objets arbitraires est de trier par leur repr()
. Bien sûr, cela pourrait faire perdre beaucoup de temps et de mémoire à la construction de l'ordinateur repr()
pour les grandes listes, etc.
sorted(a, key=repr) == sorted(b, key==repr)
Si les objets sont tous de votre propre type, vous pouvez définir __lt__()
afin que l'objet sache se comparer aux autres. Ensuite, vous pouvez simplement les trier sans vous préoccuper de l'ordre des objets. key=
paramètre. Bien entendu, vous pouvez également définir __hash__()
et utiliser Counter
qui sera plus rapide.
7 votes
Comment les objets sont-ils comparés ?
2 votes
Quelle est la taille attendue des listes réelles ? Les listes comparées seront-elles de tailles comparables ou très différentes ? Vous attendez-vous à ce que la plupart des listes correspondent ou non ?
0 votes
On peut vérifier
len()
és en premier.