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