【问题标题】:Python Tuple Comparison not working for multiple less than, more thanPython元组比较不适用于多个小于,大于
【发布时间】:2013-10-07 17:51:39
【问题描述】:

我有一个 3D 坐标元组 (x, y, z)。我想测试给定元组的 3 个坐标中没有一个低于(a,b,c)并且没有一个高于(d,e,f)。 通过反复试验和阅读这些论坛,我了解到:

(a, b, c)

在第一个表达式求值时不起作用,然后得到该结果(0 或 1)并在下一次求值中使用它,依此类推。 所以现在我尝试了:

((a, b, c)

这也不起作用,因为当它在三个配对比较(a、x;b、y;c、z;等)中的任何一个中达到 True 时,结果为 True。因此,元组比较更像十进制值,而不是三个单独的标量变量。我需要所有三个配对比较(总共六个)的任何失败来产生 False 结果,而不是任何成功来产生 True。

我希望有一个像 a

【问题讨论】:

    标签: python comparison tuples


    【解决方案1】:

    假设您的lowerupper 绑定以及您的点是三元组,试试这个:

    lower = 1,2,3
    upper = 5,2,7
    xyz = 2,3,4
    
    all(u <= j <= v for u, j, v in zip(lower, xyz, upper))
    

    或者只是单独比较它们:

    (a <= x <= d) and (b <= y <= e) and (c <= z <= f)
    

    【讨论】:

    • 我想说你和 falsetru 都给出了最好的答案。在仔细考虑了 falsetru 的回应之后,我开始使用您提出的 Pythonic 方法,Tobias。谢谢你们!
    【解决方案2】:

    根据Expression - Comparison

    元组和列表通过字典顺序比较相应的元素进行比较。 ...

    定义你自己的比较函数。

    >>> def lte(x, y):
    ...     return all(a <= b for a, b in zip(x, y))
    ... 
    >>> lte((1,2,3), (2,3,4))
    True
    >>> lte((1,2,3), (0,3,4))
    False
    >>> lte((1,2,3), (2,3,4)) and lte((2,3,4), (3,4,5))
    True
    >>> lte((1,2,3), (2,3,4)) and lte((2,3,4), (3,2,5))
    False
    

    【讨论】:

      【解决方案3】:

      通过试验、错误和阅读这些论坛,我了解到 [...] 不起作用...

      但它确实如此,因为 Python 链关系运算符。

      >>> 3 < 4 < 5
      True
      >>> 5 > 4 > 3
      True
      

      这也不起作用,因为当它在三个配对比较中的任何一个中达到 True [...] 时,结果为 True。

      除了 Python 比较两个序列操作数(相同类型)中的所有元素。

      >>> (1, 2, 3) >= (1, 2, 4)
      False
      

      请确认您确实在使用 Python,因为您的两个观察结果都是错误的。

      【讨论】:

      • 当我打印 (35, 43, 29)
      • 那么你需要在问题中指定。
      • 如果 a
      猜你喜欢
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      相关资源
      最近更新 更多