2017-02-20 78 views
2

含义“如果每个项目在具有相同索引的其他项目的范围内”。Python - 如果数组在其他数组的范围内

price = [1, 2] 
budget = [5, 7] 

这工作:

if price[0] in range(budget[0]) and price[1] in range(budget[1]): 
    affordable = True 

我想,有一些方法,只是引用整个数组,虽然。像这样:if price in budget:

+0

究竟你是什么意思,“范围内”?什么是单个项目的范围?什么决定价格是否“在预算内”? –

+1

你可以使用['all'](https://docs.python.org/3/library/functions.html#all);例如(如果所有(价格[我]在范围内(预算[i])在范围内(...))或全部(p在范围内(b)为p,b在zip(价格,预算))'如果这就是你真正想要的。 – khelwood

回答

5

你可以使用:

if all(x in range(y) for x,y in zip(price,budget)): 
    affordable = True 

这将创建price[i],budget[i]元组,然后每个元组,我们检查price[i]range(budget[i])。不过,你可以进一步优化这:

if all(0 <= x < y for x,y in zip(price,budget)): 
    affordable = True

注意,这使得假设price s为所有整数。如果您使用x in range(y),则它将失败,如果x不是整数。所以0.7 in range(10)会失败,而我们的第二种方法会成功(但它取决于你想要什么)。

+0

如果预算不是一个整数,则使用范围也会失败 –

+0

'0 <= x <= y'(或类似的)而不是范围内的x(y)'将处理浮点数而不编译(并且迭代; PY2)一个'list' – schwobaseggl

+0

这样做,谢谢:)我只记得在我的情况下我真正需要的是检查两者中的一个,而不是两者,下面是在这种情况下如何执行:'如果有(x不在范围内(y)for x,y in zip(price,budget)):' – JackHasaKeyboard

2

假设价格和预算都必须是非负数,使用in range似乎是过度复杂的事情。相反,您可以使用<运算符。

不管你是否使用<in range,这似乎是最简单的方法是zip两个列表和应用条件上对:

if (all([x[0] >= x[1] for x in zip(budget, price)])): 
    affordable = True