J'ai besoin de la fonction suivante:
Entrée : alist
Sortie :
True
si tous les éléments de la liste d'entrée sont évalués comme égaux les uns aux autres à l'aide de l'opérateur d'égalité standard;False
autrement.
Performance : bien sûr, je préfère ne pas encourir de frais généraux inutiles.
Je pense qu'il serait préférable de:
- parcourir la liste
- comparer les éléments adjacents
- et
AND
toutes les valeurs booléennes résultantes
Mais je ne sais pas quelle est la façon la plus Pythonique de le faire.
L'absence de fonction de court-circuit ne fait mal que sur une longue entrée (plus de ~ 50 éléments) qui a des éléments inégaux dès le début. Si cela se produit assez souvent (la fréquence dépend de la durée des listes), le court-circuit est nécessaire. Le meilleur algorithme de court-circuit semble être @KennyTM checkEqual1
. Il paie cependant un coût important pour cela:
- jusqu'à 20x dans des listes de performances presque identiques
- jusqu'à 2,5 fois les performances sur les listes restreintes
Si les entrées longues avec des éléments inégaux précoces ne se produisent pas (ou se produisent suffisamment rarement), un court-circuit n'est pas nécessaire. La solution @Ivo van der Wijk est de loin la plus rapide.
functools.reduce(operator.eq, a)
ne pas avoir été suggéré.
a == b
ou identique àa is b
?