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

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


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

Btw,这本书中没有解释。

#1 楼

比较元组的位置:
将第一元组的第一项与第二元组的第一项进行比较;如果它们不相等(即,第一个大于或小于第二个),则这是比较的结果;否则,将考虑第二个,然后是第三个,依此类推。
请参阅常见序列操作:

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

还可以进行值比较以获取更多详细信息:

内置集合之间的词法比较如下:

要使两个集合相等,它们必须是同一类型,具有相同的长度,并且每对对应的元素必须比较相等(例如,由于类型不同,[1,2] == (1,2)为false)。
支持顺序比较的集合的排序与其第一个不相等元素相同(例如,[1,2,x] <= [1,2,y]x <= y具有相同的值)。如果不存在相应的元素,则将对较短的集合进行排序(例如,[1,2] < [1,2,3]为true)。


如果不相等,则其顺序将与它们的第一个不同元素相同。例如,cmp([1,2,x],[1,2,y])返回的结果与cmp(x,y)相同。如果相应的元素不存在,则较短的序列被认为较小(例如[1,2] <[1,2,3]返回True)。
注1:<>并不意味着“较小”比”和“大于”,但“在……之前”和“在……之后”:所以(0,1)“在……之前”(1,0)。
注2:在一个数组中,元组不能视为向量n维空间,根据其长度进行比较。
注意3:参考问题https://stackoverflow.com/questions/36911617/python-2-tuple-comparison:仅当第一个元组的任何元素大于对应的元组时,才认为该元组比另一个元组“更大”一秒。

评论


在谈论<和>时,这可能会产生误导。例如,(0,1)<(1,0)的计算结果为True。

–没有
15年7月30日在14:17

@CMCDragonkai-是的尝试:x =元组([0对于range(n)中的_]]),对y做同样的事情。设置n = 100、1000、10,000和100,000并运行%timeit x == y分别给出了0.5、4.6、43.9和443微秒的计时值,这与您实际上可以获得的O(n)差不多。 。

–Michael Scott Cuthbert
2015年12月8日在21:41

@ J.Money为什么您会误导您?

–唐
2015年12月9日在8:49

@CharlieParker <和>的意思不是“小于”和“大于”,而是“先于”和“后于”:所以(0,1)“先于”(1,0)

–唐
16-09-22在8:09

@Don我猜不清楚我们对元组施加哪种类型的排序。我猜想python只是通过首先检查最大的有效数字并将其继续下去来将其视为死亡...(以元素明智的方式)

–查理·帕克(Charlie Parker)
16-09-22在15:41

#2 楼

Python文档确实对此进行了解释。


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


评论


现在从此答案链接的页面似乎不包含引用的文本。

–洗头
3月10日16:09

#3 楼

python 2.5文档对此进行了很好的解释。



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

如果不相等,则序列与它们的第一个不同的顺序相同元素。例如,cmp([1,2,x],[1,2,y])返回的内容与cmp(x,y)相同。如果相应的元素不存在,则较短的序列首先被排序(例如[1,2] <[1,2,3])。


不幸的是,该页面似乎已消失在较新版本的文档中。

#4 楼

在考虑整数比较之前,我有些困惑,因此我将通过一个示例来说明它对初学者更友好。

q转换为对应的ASCII a = ('A','B','C') # see it as the string "ABC" b = ('A','B','D')元素

因此,
ord('A') #65
您可以将其看作是字符串之间的比较(实际上,确实如此)

整数也是如此

>> a>b # True
因为(1不大于1,移至下一个,2不大于2,移至下一个2小于三-按字典顺序-)

上面的答案中提到了要点



认为它是一个元素,然后按字母顺序排列,不是另一个元素更大而不是元素,在这种情况下,将所有元组元素视为一个字符串。



评论


(1,2,3)>(1,2,2)为真

– Vishal Singh
3月9日9:26