How does tuple comparison work in Python?

前端 未结 4 1661
梦毁少年i
梦毁少年i 2020-11-22 04:26

I have been reading the Core Python programming book, and the author shows an example like:

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

So,

相关标签:
4条回答
  • 2020-11-22 04:57

    The Python documentation does explain it.

    Tuples and lists are compared lexicographically using comparison of corresponding elements. This means that to compare equal, each element must compare equal and the two sequences must be of the same type and have the same length.

    0 讨论(0)
  • 2020-11-22 05:06

    Tuples are compared position by position: the first item of the first tuple is compared to the first item of the second tuple; if they are not equal (i.e. the first is greater or smaller than the second) then that's the result of the comparison, else the second item is considered, then the third and so on.

    See Common Sequence Operations:

    Sequences of the same type also support comparisons. In particular, tuples and lists are compared lexicographically by comparing corresponding elements. This means that to compare equal, every element must compare equal and the two sequences must be of the same type and have the same length.

    Also Value Comparisons for further details:

    Lexicographical comparison between built-in collections works as follows:

    • For two collections to compare equal, they must be of the same type, have the same length, and each pair of corresponding elements must compare equal (for example, [1,2] == (1,2) is false because the type is not the same).
    • Collections that support order comparison are ordered the same as their first unequal elements (for example, [1,2,x] <= [1,2,y] has the same value as x <= y). If a corresponding element does not exist, the shorter collection is ordered first (for example, [1,2] < [1,2,3] is true).

    If not equal, the sequences are ordered the same as their first differing elements. For example, cmp([1,2,x], [1,2,y]) returns the same as cmp(x,y). If the corresponding element does not exist, the shorter sequence is considered smaller (for example, [1,2] < [1,2,3] returns True).

    Note 1: < and > do not mean "smaller than" and "greater than" but "is before" and "is after": so (0, 1) "is before" (1, 0).

    Note 2: tuples must not be considered as vectors in a n-dimensional space, compared according to their length.

    Note 3: referring to question https://stackoverflow.com/questions/36911617/python-2-tuple-comparison: do not think that a tuple is "greater" than another only if any element of the first is greater than the corresponding one in the second.

    0 讨论(0)
  • 2020-11-22 05:09
    I had some confusion before regarding integer comparsion, so I will explain it to be more beginner friendly with an example

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

    A is converted to its corresponding ASCII ord('A') #65 same for other elements

    So, >> a>b # True you can think of it as comparing between string (It is exactly, actually)

    the same thing goes for integers too.

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

    because (1 is not greater than 1, move to the next, 2 is not greater than 2, move to the next 2 is less than three -lexicographically -)

    The key point is mentioned in the answer above

    think of it as an element is before another alphabetically not element is greater than an element and in this case consider all the tuple elements as one string.

    0 讨论(0)
  • 2020-11-22 05:13

    The python 2.5 documentation explains it well.

    Tuples and lists are compared lexicographically using comparison of corresponding elements. This means that to compare equal, each element must compare equal and the two sequences must be of the same type and have the same length.

    If not equal, the sequences are ordered the same as their first differing elements. For example, cmp([1,2,x], [1,2,y]) returns the same as cmp(x,y). If the corresponding element does not exist, the shorter sequence is ordered first (for example, [1,2] < [1,2,3]).

    Unfortunately that page seems to have disappeared in the documentation for more recent versions.

    0 讨论(0)
提交回复
热议问题