Мне нужна следующая функция:
Вход : a list
Выход :
True
если все элементы во входном списке оцениваются как равные друг другу, используя стандартный оператор равенства; False
в противном случае.
Производительность : конечно, я предпочитаю не брать на себя никаких ненужных накладных расходов.
Я чувствую, что это будетлучше всего:
- перебрать список
- сравнить соседние элементы
- и
AND
все полученные логические значения
Но я не уверен, какой самый Pythonic способ сделать это.
РЕДАКТИРОВАТЬ :
Спасибо за все отличные ответы.Я оценил несколько, и было действительно трудно выбрать между решениями @KennyTM и @Ivo van der Wijk.
Отсутствие функции короткого замыкания сказывается только на длинном входе (более ~ 50 элементов), который имеетнеравные элементы в начале.Если это происходит достаточно часто (как часто зависит от длины списков), короткое замыкание не требуется.Кажется, лучший алгоритм короткого замыкания - @KennyTM checkEqual1
.Однако за это стоит немалых затрат:
- до 20x в почти идентичных списках производительности
- до 2.5x в коротких списках производительности
Если длинные входы с ранними неравными элементами не происходят (или случаются достаточно редко), короткое замыкание не требуется.Тогда, безусловно, самым быстрым является решение @Ivo van der Wijk.