Вопрос-Ответ

How does tuple comparison work in Python?

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

Я читал книгу по программированию 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-мерном пространстве, сравниваемые по их длине.

Примечание 3: ссылаясь на вопрос https://pythonly.ru/questions/36911617/python-2-tuple-comparison: не думайте, что кортеж "больше" другого, только если какой-либо элемент первого больше соответствующего элемента во втором.

Ответ 2

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


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


Ответ 3

В документации по python 2.5 это хорошо объясняется.


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


Если последовательности не равны, они упорядочиваются так же, как и их первые отличающиеся элементы. Например, 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, который больше элемента, и в этом случае рассматривайте все элементы кортежа как одну строку.



2023-12-31 11:23 python