Как работает сравнение кортежей в Python? - PullRequest
138 голосов
/ 13 марта 2011

Я читал книгу по программированию Core Python , и автор показывает такой пример:

(4, 5) < (3, 5) # Equals false

Итак, мне интересно, как / почему оно равно ложному? Как Python сравнивает эти два кортежа?

Кстати, это не объяснено в книге.

Ответы [ 4 ]

152 голосов
/ 13 марта 2011

Кортежи сравниваются по позиции: первый элемент первого кортежа сравнивается с первым элементом второго кортежа; если они не равны (т. е. первое больше или меньше второго), то это результат сравнения, в противном случае рассматривается второй элемент, затем третий и т. д.

См. Документ :

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

Также это :

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

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

Примечание 1 : < и > не означают «меньше, чем» и «больше, чем», но «до» и «после»: поэтому (0, 1) «это до "(1, 0).

Примечание 2 : кортежи не должны рассматриваться как векторов в n-мерном пространстве по сравнению с их длиной.

Примечание 3 : относится к вопросу Сравнение кортежей Python 2 : не думайте, что кортеж «больше» другого, только если какой-либо элемент первого больше соответствующего один во второй.

20 голосов
/ 13 марта 2011

Документация Python объясняет это.

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

1 голос
/ 14 марта 2019

Сравнение кортежей

Оператор сравнения в Python может работать с кортежами.Сравнение начинается с первого элемента каждого кортежа.Если они не сравниваются с =, < или >, то переходят ко второму элементу и т. Д.

Давайте рассмотрим это на примере:

    #case 1
    a=(5,6)
    b=(1,4)
    if (a>b):print("a is bigger")
    else: print("b is bigger")

    #case 2
    a=(5,6)
    b=(5,4)
    if (a>b):print("a is bigger")
    else: print ("b is bigger")

    #case 3
    a=(5,6)
    b=(6,4)
    if (a>b):print("a is bigger")
    else: print("b is bigger")

Case1:

Сравнение начинается с первого элемента каждого кортежа.В этом случае 5> 1, поэтому выход a больше

Случай 2:

Сравнение начинается с первого элемента каждого кортежа.В этом случае 5> 5, что является неубедительным.Итак, переходим к следующему элементу.6> 4, поэтому выход a больше

Случай 3:

Сравнение начинается с первого элемента каждого кортежа.В этом случае 5> 6, что неверно.Таким образом, он входит в цикл else: «b больше»он не сравнивает все элементы.

0 голосов
/ 01 февраля 2019
У меня была некоторая путаница перед сравнением целых чисел, поэтому я объясню, что это будет более дружественным для новичка на примере

a = ('A','B','C') # see it as the string "ABC" b = ('A','B','D')

A преобразуется в соответствующий ему ASCII ord('A') #65 то же самое для других элементов

Итак, >> a>b # True Вы можете думать об этом как о сравнении строки (это точно, на самом деле)

то же самое относится и к целым числам.

x = (1,2,3) # see it the string "123" y = (1,2,2) x > y # False

потому что (1 не больше 1, перейти к следующему, 2 не больше 2, перейти к следующим 2 меньше, чем три -лексиографически -)

Ключевой момент упомянут в ответе выше

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

...