Eu preciso da seguinte função:
Entrada : alist
Saída :
True
se todos os elementos na lista de entrada forem avaliados iguais entre si usando o operador de igualdade padrão;False
de outra forma.
Desempenho : é claro, prefiro não incorrer em custos indiretos desnecessários.
Eu acho que seria melhor:
- percorrer a lista
- comparar elementos adjacentes
- e
AND
todos os valores booleanos resultantes
Mas não tenho certeza de qual é a maneira mais pitônica de fazer isso.
A falta de recurso de curto-circuito afeta apenas uma entrada longa (mais de 50 elementos) que possui elementos desiguais desde o início. Se isso ocorrer com bastante frequência (quantas vezes depende de quanto tempo as listas podem ser), é necessário um curto-circuito. O melhor algoritmo de curto-circuito parece ser o @KennyTM checkEqual1
. Paga, no entanto, um custo significativo por isso:
- até 20x em listas quase idênticas de desempenho
- desempenho de até 2,5x em listas curtas
Se as entradas longas com elementos desiguais iniciais não ocorrerem (ou ocorrerem suficientemente raramente), não será necessário um curto-circuito. Então, de longe, o mais rápido é a solução @Ivo van der Wijk.
functools.reduce(operator.eq, a)
não ter sido sugerido.
a == b
ou idêntico como ema is b
?