Necesito la siguiente función:
Entrada : alist
Salida :
True
si todos los elementos en la lista de entrada se evalúan como iguales entre sí utilizando el operador de igualdad estándar;False
de otra manera.
Rendimiento : por supuesto, prefiero no incurrir en gastos generales innecesarios.
Siento que sería mejor:
- iterar a través de la lista
- comparar elementos adyacentes
- y
AND
todos los valores booleanos resultantes
Pero no estoy seguro de cuál es la forma más pitónica de hacer eso.
La falta de función de cortocircuito solo perjudica a una entrada larga (más de ~ 50 elementos) que tienen elementos desiguales desde el principio. Si esto ocurre con la suficiente frecuencia (la frecuencia depende de la duración de las listas), se requiere un cortocircuito. El mejor algoritmo de cortocircuito parece ser @KennyTM checkEqual1
. Sin embargo, paga un costo significativo por esto:
- Hasta 20 veces en listas casi idénticas de rendimiento
- hasta 2.5x en rendimiento en listas cortas
Si las entradas largas con elementos desiguales tempranos no suceden (o suceden con suficiente frecuencia), no se requiere un cortocircuito. Entonces, con mucho, el más rápido es la solución @Ivo van der Wijk.
functools.reduce(operator.eq, a)
no se haya sugerido.
a == b
o idéntico como ena is b
?