这是一个简单的代码:
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。有关如何修改此内容的任何提示吗?
答案 0 :(得分:4)
使用all
或any
同时测试元组中的所有值。如果迭代中的所有内容都为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")