比较python中两个元组的部分值

时间:2015-06-21 03:20:42

标签: python tuples

这是一个简单的代码:

a=(6,3,4,5)
b=(1,2,1,3)

if (a[i]<b[i+1]  for i in range(1,3)):
    print("Yes")
else:
    print("No")

我想做的是 如果[1]&lt;打印,则打印是b [2]和a [2]&lt; a [3],否则返回编号

此代码始终返回Yes。有关如何修改此内容的任何提示吗?

3 个答案:

答案 0 :(得分:4)

使用allany同时测试元组中的所有值。如果迭代中的所有内容都为all,则True会返回True - ish;如果可迭代中的任何内容为any,那么True会返回True

例如:

if all(a[i]<b[i+1]  for i in range(1,3)):
    print("Yes")
else:
    print("No")

答案 1 :(得分:1)

您可以使用reduce累积结果:

def test(a, b):
    return "Yes" if (reduce(lambda i, j: a[i]<b[j], range(1,3))) else "No"


a=(6,3,4,5)
b=(1,2,1,3)
print test(a, b) # "No"

a=(0,0,0,0)
print test(a, b) # "Yes"

答案 2 :(得分:0)

一种方法是使用zip(),它就像拉链一样 - 给它两个序列并将它们网格化在一起,给出每个元素的第一个元素,每个元素的第二个元素等等:

>>> a=(6,3,4,5)
>>> b=(1,2,1,3)
>>> list(zip(a,b))
[(6, 1), (3, 2), (4, 1), (5, 3)]

然后你可以把它切成你感兴趣的那些:

>>> zip(a,b)[1:3]
[(3, 2), (4, 1)]

然后在循环中测试它们:

for an, bn in zip(a, b)[1:3]:
    if an < bn:
      ???

使用Python's for/else loop thing来处理所有这些内容,同时只打印输出一次。一旦出错就失败并打印否,如果它结束并且没有错误,请打印是。

for an, bn in zip(a, b)[1:3]:
    if an > bn:
        print("No")
        break
else:
    print("Yes")