Python中的高级比较“Think Python”

时间:2014-02-19 01:49:35

标签: python python-2.7 compare

我目前正在处理Allen B. Downey的几个“Think Python”部分,我在第16.1节中无法理解问题的解决方案:

  

编写一个名为is_after的布尔函数,它接受两个Time对象,   t1和t2,如果t1按时间顺序跟随t2,则返回True   除此以外。挑战:不要使用if语句。

他的解决方案如下:

def is_after(t1, t2):
"""Returns True if t1 is after t2; false otherwise."""
return (t1.hour, t1.minute, t1.second) > (t2.hour, t2.minute, t2.second)

Full solution code显示在这里。

问题:此运算符是否同时比较多个值?这怎么工作?我在哪里可以阅读更多相关信息?

4 个答案:

答案 0 :(得分:3)

Read the docs here for an explanation

  

可以将序列对象与具有相同序列类型的其他对象进行比较。比较使用词典排序:首先比较前两个项目,如果它们不同,则确定比较的结果;如果它们相等,则比较接下来的两个项目,依此类推,直到任一序列用完为止。如果要比较的两个项本身是相同类型的序列,则递归地执行词典比较。如果两个序列的所有项比较相等,则认为序列相等。如果一个序列是另一个序列的初始子序列,则较短的序列是较小的(较小的)序列。

根据您的具体情况: t1.hourt2.hour进行比较。如果它们相等,则会将t1.minutet2.minute进行比较。如果那些相等,则会将t1.secondt2.second进行比较。一旦存在不平等,就会返回。

答案 1 :(得分:2)

(t1.hour, t1.minute, t1.second)(t2.hour, t2.minute, t2.second)是元组。来自docs

  

使用相应元素的比较,按字典顺序比较元组和列表。

意味着首先比较t1.hourt2.hour,然后是分钟,然后是秒。

答案 2 :(得分:1)

来自Python documentation: 序列类型也支持比较。特别是,通过比较相应的元素,按字典顺序比较元组和列表。

答案 3 :(得分:-1)

它只是比较元组。在终端上做(2,3,4) > (1,2,3),你就明白了。使用元组比较和元组比较规则将变得非常明显。