Ho bisogno della seguente funzione:
Input : alist
Uscita :
True
se tutti gli elementi nell'elenco di input vengono valutati uguali tra loro utilizzando l'operatore di uguaglianza standard;False
altrimenti.
Prestazioni : ovviamente preferisco non sostenere spese inutili.
Sento che sarebbe meglio:
- scorrere l'elenco
- confronta gli elementi adiacenti
- e
AND
tutti i valori booleani risultanti
Ma non sono sicuro di quale sia il modo più Pythonic per farlo.
La mancanza di funzionalità di corto circuito fa male solo su un input lungo (oltre ~ 50 elementi) che hanno elementi disuguali all'inizio. Se ciò si verifica abbastanza spesso (quanto spesso dipende da quanto potrebbero essere lunghi gli elenchi), è necessario il cortocircuito. Il miglior algoritmo di corto circuito sembra essere @KennyTM checkEqual1
. Paga, tuttavia, un costo significativo per questo:
- fino a 20x in elenchi quasi identici delle prestazioni
- fino a 2,5 volte in termini di prestazioni su elenchi brevi
Se gli input lunghi con elementi disuguali precoci non si verificano (o accadono in modo sufficientemente raro), non è necessario il cortocircuito. Quindi, di gran lunga la più veloce è la soluzione @Ivo van der Wijk.
functools.reduce(operator.eq, a)
non sia stato suggerito.
a == b
o identico a ina is b
?