在Python中,具有相同数据类型的序列可以通过关系运算符进行比较。对序列进行比较大小,实际上就是对序列中的数据以“在字典中的顺序”(lexicographical ordering)进行比较,也就是出现在一本字典前面的数据要比后面的数据小。
1 比较的方法
1.1 当两个序列长度相同时
对于比较两个长度相同的序列,先按照字典顺序,比较这两个序列的第一个数据值,如果能够比较出大小,则该结果即为这两个序列的大小结果;如果第一个数值相等,则继续比较第二个数值,以此类推,直到比较序列中的所有元素都比完,如果所有的元素都相等,则这两个序列相等。
>>> a = [1, 2, 3, 4]
>>> b = [1, 2, 5, 6]
>>> c = [1, 2, 3, 4]
>>> a < b
True
>>> a == c
True
按照之前提到的比较规则,列表a小于列表b;列表a与列表c相等。
1.2 当两个序列长度不同时
对于比较两个长度不同的序列时,首先按照“1.1 当两个序列长度相同时”中提到的方法进行比较,如果在较短序列的元素都比较完之后依然没有分出大小,则此时较长序列大于较短序列。
>>> a = [1, 2]
>>> b = [1, 2, 3]
>>> a < b
True
此时,列表b的长度大于列表a的长度,在a中所有元素都比较完之后依然没有分出大小,则b大于a。
2 含有不同类型数据序列的比较
2.1 所含的数据类型可以比较时
在前面提到,含有相同类型数据的序列可以进行比较,当两个序列含有不同数据类型时,只要不同的数据类型之间可以进行关系运算符的操作,则也可以对这两个序列进行比较。
>>> a = [1, 2, 3]
>>> b = [1.0, 2.0, 3.0]
>>> a == b
True
其中,列表a中的数据类型是整型,而列表b中的数据类型是浮点型,因为整型和浮点型可以使用关系运算符进行比较,因此,列表a和列表b之间也可以使用关系运算符进行比较。
2.2 所含的数据类型不能比较时
如果两个序列所含的数据类型不能比较时,比较这两个序列的代码会报错。
>>> a = [1, 2, 3]
>>> b = ['a', 'b', 'c']
>>> a > b
Traceback (most recent call last):
File "<pyshell#27>", line 1, in <module>
a > b
TypeError: '>' not supported between instances of 'int' and 'str'
此时的报错信息为“类型错误:整型和字符串之间不支持‘>’的操作”。