【问题标题】:Tuple comparison in PythonPython中的元组比较
【发布时间】:2014-05-17 19:11:33
【问题描述】:

根据this

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

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

如果我理解正确

(a, b, c) < (d, e, f)

如果

给出真
a < d and b < e and c < f

为什么

(1, 2, 3) < (2, 0, 4)

给真?

我该如何做这样的比较?

【问题讨论】:

  • 您引用的第二段解释了它:如果它们不相等,则它们的顺序与它们的第一个不同元素相同。

标签: python comparison tuples


【解决方案1】:

你的理解是有缺陷的。这不是and - 这是一个级联比较。

a < d or (a == d and b < e) or (a == d and b == e and c < f)

另一种理解任意长度元组的方式...

def tuple_less_than(tuple1, tuple2):
    for item1, item2 in zip(tuple1, tuple2):
        if item1 != item2:
            return item1 < item2
    return len(tuple1) < len(tuple2)

【讨论】:

    【解决方案2】:

    简单解释,读值就像十进制数一样

    123 &lt; 204

    这太简单了,但我的意思是,它会逐个比较元素,一旦元素不一样就结束。

    【讨论】:

    • 您示例中的概念不适用于 (1, 0, 0) &lt; (2, 3) 这样的情况。
    【解决方案3】:

    把它想象成比较两个字符串。每个元素的第一次不相等比较确定比较结果。

    (1, 2, 3) < (2, 3)
    True
    
    "123" < "23"
    True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多