在Python中,元组比较是如何工作的?

Pau*_*ulo 147 python comparison tuples

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

(4, 5) < (3, 5) # Equals false
Run Code Online (Sandbox Code Playgroud)

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

顺便说一下,书中没有解释.

Don*_*Don 164

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

文档:

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

同时:

使用相应元素的比较,按字典顺序比较元组和列表.这意味着要比较相等,每个元素必须比较相等,并且两个序列必须是相同类型并且具有相同的长度.

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

注1:[1,2] == (1,2)[1,2,x] <= [1,2,y]并不意味着"小于"的,而是"是之前"和"之后","大于":所以(0,1)"是之前"(1,0).

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

注3:引用问题Python 2元组比较:只有当第一个元素中的任何元素大于第二个元素中的相应元素时,才认为元组比另一元素"更大".

  • @ J.Money为什么你认为它会误导? (6认同)
  • 在O(n)中进行元组比较吗? (5认同)
  • @CMCDragonkai - 是的.尝试:`x = tuple([0 for _ in range(n)])`并对y执行相同操作.设置n = 100,1000,10,000和100,000并且运行'%timeit x == y`分别给出时间值分别为.5,4.6,43.9和443微秒,这几乎与O(n)接近,尽可能接近O(n)几乎得到. (4认同)
  • 在谈论`<`和`>`时,这可能会产生误导.例如,`(0,1)<(1,0)`计算为'True`. (3认同)
  • @Don我想我们不清楚我们在元组上强加什么类型的命令.我猜python只是通过首先检查最大的有效数字并继续进行破坏而将其视为数字...(以元素方式) (3认同)
  • @CharlieParker `&lt;` 和 `&gt;` 并不意味着“更小”和“更大”,而是“之前”和“之后”:所以`(0, 1)`“之前”`(1, 0) ` (2认同)
  • @J.Money 它非常实用,因为元组可以放入更复杂的数据结构(如堆)中,并按第一个值进行比较。有趣的是,在某些情况下,您还可以获得稳定排序作为奖励。 (2认同)

Kei*_*ith 20

Python文档做解释.

使用相应元素的比较,按字典顺序比较元组和列表.这意味着要比较相等,每个元素必须比较相等,并且两个序列必须是相同类型并且具有相同的长度.