Я читал книгу по программированию Core Python, и автор показывает пример, подобный:
(4, 5) < (3, 5) # Equals false
Итак, мне интересно, как / почему оно равно false? Как python сравнивает эти два кортежа?
Кстати, в книге это не объясняется.
Переведено автоматически
Ответ 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] < [1,2,3] возвращает True).
Примечание 1: < и > не означают "меньше" и "больше", но "перед" и "после": так что (0, 1) "перед" (1, 0).
Примечание 2: кортежи нельзя рассматривать как векторы в n-мерном пространстве, сравниваемые по их длине.
Кортежи и списки сравниваются лексикографически с использованием сравнения соответствующих элементов. Это означает, что для сравнения равных каждый элемент должен сравниваться равным, а две последовательности должны быть одного типа и иметь одинаковую длину.
Кортежи и списки сравниваются лексикографически с использованием сравнения соответствующих элементов. Это означает, что для сравнения равных каждый элемент должен сравниваться равным, а две последовательности должны быть одного типа и иметь одинаковую длину.
Если последовательности не равны, они упорядочиваются так же, как и их первые отличающиеся элементы. Например, cmp([1,2,x], [1,2,y]) возвращает то же самое, что и cmp(x,y). Если соответствующий элемент не существует, сначала упорядочивается более короткая последовательность (например, [1,2] < [1,2,3]).
К сожалению, эта страница, похоже, исчезла из документации для более поздних версий.
Ответ 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,2) # see it the string "123" y = (1,2,3) x > y # False
потому что (1 не больше 1, переход к следующему, 2 не больше 2, переход к следующим 2 меньше трех -лексикографически -)
Ключевой момент упомянут в ответе выше
думайте об этом как о элементе, который находится перед другим элементом в алфавитном порядке not, который больше элемента, и в этом случае рассматривайте все элементы кортежа как одну строку.