Мені потрібна наступна функція:
Вхід : alist
Вихід :
True
якщо всі елементи у вхідному списку оцінюють як рівні між собою за допомогою стандартного оператора рівності;False
інакше.
Продуктивність : звичайно, я вважаю за краще не зазнавати зайвих накладних витрат.
Я вважаю, що найкраще:
- повторити список
- порівняйте сусідні елементи
- і
AND
всі отримані булеві значення
Але я не впевнений, який найбільш піфонічний спосіб це зробити.
Відсутність функції короткого замикання завдає шкоди лише довгому входу (понад ~ 50 елементів), у якого на початку є нерівні елементи. Якщо це трапляється досить часто (як часто залежить від того, як довго можуть бути списки), потрібне коротке замикання. Найкращим алгоритмом короткого замикання здається @KennyTM checkEqual1
. Однак вона платить за це значні витрати:
- до 20-кратного виконання майже однакових списків
- до 2,5х показників у коротких списках
Якщо довгі входи з ранніми нерівними елементами не трапляються (або трапляються досить рідко), коротке замикання не потрібно. Тоді, безумовно, найшвидшим є рішення @Ivo van der Wijk.
functools.reduce(operator.eq, a)
що не було запропоновано.
a == b
або однакові, як уa is b
?