Я читал книгу программирования Core Python, и автор показывает пример вроде:
(4, 5) < (3, 5) # Equals false
Итак, мне интересно, как/почему он равен false? Как python сравнивает эти два кортежа?
Btw, это не объяснено в книге.
Я читал книгу программирования Core Python, и автор показывает пример вроде:
(4, 5) < (3, 5) # Equals false
Итак, мне интересно, как/почему он равен false? Как python сравнивает эти два кортежа?
Btw, это не объяснено в книге.
Кортежи сравниваются по позиции: первый элемент первого набора сравнивается с первым элементом второго набора; если они не равны (т.е. первое больше или меньше второго), то это результат сравнения, в противном случае рассматривается второй элемент, затем третий и т.д.
См. Общие операции последовательности:
Последовательности того же типа также поддерживают сравнения. В частности, кортежи и списки сравниваются лексикографически путем сравнения соответствующих элементов. Это означает, что для сравнения равных каждый элемент должен сравниваться равным, а две последовательности должны быть одного типа и иметь одинаковую длину.
Также Сравнение значений для получения дополнительной информации:
Лексикографическое сравнение встроенных коллекций работает следующим образом:
- Чтобы две коллекции сравнивались на равных, они должны быть одинакового типа, иметь одинаковую длину, а каждая пара соответствующих элементов должна сравниваться на равных (например,
[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/...: не думайте, что кортеж "больше" другого, только если какой-либо элемент первого больше, чем соответствующий элемент во втором.
Документация Python объясняет это.
Сравнение наборов и списков лексикографически с использованием сравнения соответствующих элементов. Это означает что для сравнения равных, каждый элемент должны сравнивать равные и два последовательности должны быть одного типа и имеют одинаковую длину.
Оператор сравнения в 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")
Сравнение начинается с первого элемента каждого кортежа. В этом случае 5> 1, поэтому выход a больше
Сравнение начинается с первого элемента каждого кортежа. В этом случае 5> 5, что является неубедительным. Итак, переходим к следующему элементу. 6> 4, поэтому выход больше
Сравнение начинается с первого элемента каждого кортежа. В этом случае 5> 6, что неверно. Таким образом, он входит в остальное цикл печатает "б больше".
Кортежи всегда сравнивают свой первый индекс и выдают результат в соответствии с вашей программой. он не сравнивает все элементы.
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 -)
Ключевой момент упоминается в ответе выше
думать о нем как об элементе до того, как другой алфавитный элемент не будет больше элемента, и в этом случае рассматривать все элементы кортежа как одну строку.