Сравнение всех элементов двух кортежей (со всеми ()функциями)

Итак, я знаю, что сравнения кортежей работают лексикографически:

Кортежи и списки сравниваются лексикографически, используя сравнение соответствующих элементов. Это означает, что для сравнения равных каждый элемент должен сравниваться равными, а две последовательности должны быть одного типа и иметь одинаковую длину.

Если не равны, последовательности упорядочены так же, как их первые отличающиеся элементы. Например, cmp ([1,2,x], [1,2,y] )возвращает то же самое, что и cmp (x,y ). Если соответствующий элемент не существует, сначала упорядочивается более короткая последовательность (, например, [1,2]

Итак, из этого:

>>> a = (100, 0)
>>> b = (50, 50)
>>> a > b
True

Но я хочу сравнить все элементы двух кортежей по порядку, поэтому функционально я хочу что-то похожее на (с использованием значений сверху):

>>> a > b
(True, False) #returned tuple containing each comparison
>>> all(a > b)
False

В качестве примера на практике, для чего-то вроде экранных координат, если вы хотите проверить, было ли что-то «внутри» экрана по адресу (0,0 ), но выполнили сравнение типа coord > (0,0 ), если координата x больше 0, но координата y была меньше, она все равно вернет true, а это не то, что нужно в данном случае.

В качестве подвопроса/обсуждения:
Я не уверен, почему сравнение двух кортежей с разными значениями возвращается таким образом.Вам не дан какой-либо индекс, поэтому единственное, что вы получаете от сравнения кортежа (, не проверяющего равенство ), это то, что в какой-то момент в кортеже одно из сравнений выдаст истинное или ложное значение. значение, когда они не равны. Как вы могли воспользоваться этим?

5
задан Joe Staines 28 April 2012 в 00:21
поделиться