Python中为什么表达式[1] < [1, 2]的返回结果为True?
Python列表字典序比较规则说明
Python序列类型的字典序比较有明确的层级判定逻辑,对规则的理解容易遗漏「前缀全相等时的长度判定」部分,完整规则如下:
- 从两个序列的索引0位置开始,逐位对比对应位置的元素:
- 如果当前位置两个元素值不相等,直接返回这两个元素比较的布尔结果,后续剩余元素、两个序列的总长度都不再参与判定
- 如果当前位置两个元素值相等,继续向后移动索引,对比下一位的元素
- 如果逐位对比过程中,其中一个序列已经遍历完所有元素,且两个序列此前所有对应位置的元素全部相等:
- 长度更短的序列会被判定为值更小
- 若两个序列长度完全一致,则判定两个序列相等
所有测试用例的返回结果都完全匹配上述规则:
- 用例
[1] < [1, 2]:第一位元素对比1 == 1,继续向后检查时,列表[1]已经没有剩余元素,符合「前缀完全相等时短序列更小」的判定,因此返回True,结果符合语言设计逻辑。 - 对照用例
[1] < [1]:逐位对比所有元素完全相等,两个列表长度也一致,判定为相等,因此小于比较返回False。 - 对照用例
[1, 2] < [1]:第一位元素对比1 == 1,继续向后检查时,列表[1]已经遍历完成,按照规则短序列[1]值更小,因此[1, 2]小于[1]的判断不成立,返回False。
Python所有内置序列类型(字符串、元组、字节串等)都遵循这套比较逻辑,比如字符串场景下
'test' < 'test1'同样返回True,和列表比较的判定逻辑完全一致。
内容的提问来源于stack exchange,提问作者Suresh
相关产品推荐
相关产品推荐

