比较两个元组的所有元素(具有all()功能)

Joe*_*nes 5 python comparison tuples language-design

所以我知道对元组的比较是按字典顺序进行的:

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

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

所以从这个:

>>> a = (100, 0)
>>> b = (50, 50)
>>> a > b
True
Run Code Online (Sandbox Code Playgroud)

但我想按顺序比较2个元组的所有元素,所以在功能上我想要类似的东西(使用上面的值):

>>> a > b
(True, False) #returned tuple containing each comparison
>>> all(a > b)
False
Run Code Online (Sandbox Code Playgroud)

作为一个例子在实践中,对于像屏幕坐标这样的东西,如果你想检查某些东西是否在(0,0)的屏幕"内部",但做了比较如coord>(0,0),如果x coord是大于0,但是y coord更小,它仍然会返回true,这不是在这种情况下所需要的.

作为一个子问题/讨论:
我不确定为什么以这种方式返回比较2个不同值的元组.你没有得到任何类型的索引,所以你从比较一个元组(不是测试相等)得到的唯一一点就是在元组的某个点上,其中一个比较会在它们出现时抛出一个真或假的值.不平等.你怎么能利用这个呢?

gar*_*rtb 10

你可以通过列表理解和内置的zip来实现这一点:

>>> a = (100, 0)
>>> b = (50, 50)
>>> [(a > b) for a, b in zip(a,b)]
[True, False]
Run Code Online (Sandbox Code Playgroud)

您可以在返回的列表中使用all()或any().

  • 如果你调用`all`或`any`,那么你不再需要列表理解,但可以使用生成器,这允许你删除额外的括号,因为特殊的语法规则. (3认同)