Вы не можете получить немного быстрее, чем O (n), но вы можете сделать свой код немного короче и, возможно, более читабельным, используя numpy.diff
и сравнив sign
различий a
и b
* * 1005
>>> from numpy import diff, sign
>>> a, b = [1,2,4,3,5], [103,122,800,500,1000]
>>> sign(diff(a))
array([ 1, 1, -1, 1])
>>> all(sign(diff(a)) == sign(diff(b)))
True
>>> a, b = [1,2,4,3,5], [103,122,800,500,100]
>>> all(sign(diff(a)) == sign(diff(b)))
False
Недостатком этого решения является то, что оно не использует отложенную оценку, т. Е. Вычисляет и сравнивает весь массив sign(diff(...))
, даже если "возрастание" a
и b
отличается в самой первой позиции. Если список очень длинный, вам следует рассмотреть возможность использования другого подхода.