А как насчет простого решения: выполнить его один раз и протестировать? Возможно, самый быстрый, потому что многие другие решения повторяют список несколько раз.
def signs_are_alternating(numbers):
"""Return True if numbers in given list have alternating signs, False
otherwise. If given list has less than 2 elements, return False.
>>> signs_are_alternating([1, -1, 1, -1, 1])
True
>>> signs_are_alternating([-1, 1, -1, 1, -1])
True
>>> signs_are_alternating([1, -1, 1, -1, -1])
False
"""
if len(numbers) < 2:
return False
previous_positive = (numbers[0] < 0) # Pretend it starts alternating
for number in numbers:
this_positive = (number >= 0)
if previous_positive == this_positive:
return False
previous_positive = this_positive
return True
Обратите внимание, что я не совсем уверен, каково предполагаемое поведение, если список ввода содержит менее 2 элементов.