我一直在阅读核心Python编程书,作者展示了一个例子,比如:

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

我想知道,为什么它等于假?python如何比较这两个元组?

顺便说一下,书里没有解释。


Python文档对此进行了解释。

比较元组和列表 在字典上使用比较的 相应的元素。这意味着 每个元素比较相等 必须比较equal和两者吗 序列必须具有相同的类型和 长度相同。


元组按位置进行比较: 第一个元组的第一项与第二个元组的第一项进行比较;如果它们不相等(即第一项大于或小于第二项),那么这就是比较的结果,否则考虑第二项,然后是第三项,依此类推。

参见常用序列操作:

相同类型的序列也支持比较。特别是,元组和列表是通过比较对应的元素按字典顺序进行比较的。这意味着要比较相等,每个元素必须比较相等,两个序列必须具有相同的类型和相同的长度。

还有价值比较,以了解更多细节:

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).

如果不相等,则顺序与它们的第一个不同元素相同。例如,cmp([1,2,x], [1,2,y])返回与cmp(x,y)相同的结果。如果对应的元素不存在,则认为较短的序列较小(例如,[1,2]<[1,2,3]返回True)。

注1:<和>并不表示“小于”和“大于”,而是“在之前”和“在之后”:so (0,1)"is before"(1,0)。

注2:元组不能被认为是n维空间中的向量,根据它们的长度进行比较。

注3:参考问题https://stackoverflow.com/questions/36911617/python-2-tuple-comparison:,不要认为只有在第一个元组中的任何元素大于第二个元组中的相应元素时,一个元组才“大于”另一个元组。


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') #将其视为字符串"ABC" b = ('A',' b ','D')

A被转换为其对应的ASCII ord('A') #65与其他元素相同

所以, >> a>b #正确 你可以把它看作是字符串之间的比较(实际上就是这样)

对于整数也是一样的。

X =(1,2,2) #看到它的字符串“123” Y = (1,2,3) x > y #错误

因为(1不大于1,移动到下一个,2不大于2,移动到下一个2小于3 -按字典顺序-)

重点在上面的回答中提到了

把它想象成一个元素在另一个字母顺序不是元素的元素之前,在这种情况下,把所有元组元素看作一个字符串。


python 2.5文档很好地解释了这一点。

元组和列表使用对应元素的比较按字典顺序进行比较。这意味着要比较相等,每个元素必须比较相等,两个序列必须具有相同的类型和相同的长度。 如果不相等,则顺序与它们的第一个不同元素相同。例如,cmp([1,2,x], [1,2,y])返回与cmp(x,y)相同的结果。如果对应的元素不存在,则较短的序列优先排序(例如,[1,2]<[1,2,3])。

不幸的是,在最新版本的文档中,这个页面似乎已经消失了。