(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:仅当第一个元组的任何元素大于对应的元组时,才认为该元组比另一个元组“更大”一秒。
#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
评论
在谈论<和>时,这可能会产生误导。例如,(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