Подтвердить что ты не робот

Как работает сравнение кортежей в Python?

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

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

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

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

4b9b3361

Ответ 1

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

См. Общие операции последовательности:

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

Также Сравнение значений для получения дополнительной информации:

Лексикографическое сравнение встроенных коллекций работает следующим образом:

  • Чтобы две коллекции сравнивались на равных, они должны быть одинакового типа, иметь одинаковую длину, а каждая пара соответствующих элементов должна сравниваться на равных (например, [1,2] == (1,2) имеет значение false, поскольку тип не совпадает).
  • Коллекции, поддерживающие сравнение порядка, упорядочиваются так же, как и их первые неравные элементы (например, [1,2,x] <= [1,2,y] имеет то же значение, что и x <= y). Если соответствующий элемент не существует, вначале упорядочивается более короткая коллекция (например, [1,2] < [1,2,3] имеет значение true).

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

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

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

Примечание 3: ссылаясь на вопрос fooobar.com/questions/58662/...: не думайте, что кортеж "больше" другого, только если какой-либо элемент первого больше, чем соответствующий элемент во втором.

Ответ 2

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

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

Ответ 3

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

Оператор сравнения в 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")

Случай 1:

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

Случай 2:

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

Случай 3:

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

заключение:

Кортежи всегда сравнивают свой первый индекс и выдают результат в соответствии с вашей программой. он не сравнивает все элементы.

Ответ 4

У меня была некоторая путаница перед сравнением целых чисел, поэтому я объясню это, чтобы быть более дружелюбным для начинающих на примере

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 меньше трех -lexicographically -)

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

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