Potrzebuję następującej funkcji:
Dane wejściowe : alist
Wyjście :
True
jeżeli wszystkie elementy na liście danych wejściowych oceniają się jako równe za pomocą standardowego operatora równości;False
Inaczej.
Wydajność : oczywiście wolę nie ponosić niepotrzebnego obciążenia.
Myślę, że najlepiej byłoby:
- iteruj po liście
- porównaj sąsiednie elementy
- i
AND
wszystkie wynikowe wartości boolowskie
Ale nie jestem pewien, jaki jest najbardziej Pythoniczny sposób na zrobienie tego.
Brak funkcji zwarcia boli tylko na długim wejściu (ponad ~ 50 elementów), które mają nierówne elementy na początku. Jeśli zdarza się to wystarczająco często (jak często zależy od długości list), wymagane jest zwarcie. Najlepszym algorytmem zwarciowym wydaje się być @KennyTM checkEqual1
. Płacą jednak za to znaczne koszty:
- do 20x w wydajności prawie identyczne listy
- do 2,5x wydajności na krótkich listach
Jeśli długie sygnały wejściowe z wczesnymi nierównymi elementami nie występują (lub występują dość rzadko), zwarcie nie jest wymagane. Zdecydowanie najszybsze jest rozwiązanie @Ivo van der Wijk.
functools.reduce(operator.eq, a)
że nie został zasugerowany.
a == b
lub identyczna jak wa is b
?