2017-02-20 84 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