Почему бы не воспользоваться тем фактом, что если все числа имеют один и тот же знак, то сумма абсолютного значения каждого отдельного числа будет равна абсолютному значению суммы каждого числа?
def check_sign(queryset):
return abs(sum(queryset)) == sum(map(abs, queryset))
Пример, показывающий детали математики
Случай 1: Все числа имеют одинаковый знак
a = (-1, -4, -8)
sum(a) = -13
abs(sum(a)) = 13 # the absolute value of the tuple's sum
map(abs, a) = [1, 4, 8]
sum(map(abs, a)) = 13 # the tuple's sum of each element's absolute value
Оба метода дают 13, поэтому знаки одинаковы.
Случай 2: Не все числа имеют одинаковый знак
b = (-1, 4, 8)
sum(b) = 11
abs(sum(b)) = 11 # the absolute value of the tuple's sum
map(abs, b) = [1, 4, 8]
sum(map(abs, b)) = 13 # the tuple's sum of each element's absolute value
Методы дают разные числа (11 и 13), поэтому знаки не все одинаковы.