2017-02-20 20 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](範囲[i])」または「すべて(pは範囲(b)内のp、zip(価格、予算)のb」)それが本当に欲しいものならば。 – 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])であることを確認してください。これはprice sがすべて整数であるという仮定を作ること

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

注:それでも、あなたがにこれをさらに最適化することができます。ただし、x in range(y)を使用すると、xが整数でないと失敗します。したがって、0.7 in range(10)は失敗しますが、2つ目の方法は成功します(もちろん、あなたが望むものに依存します)。

+0

予算が整数でない場合、範囲の使用は失敗するでしょう。 –

+0

'0 <= x <= y'(またはそれに似た)' xの範囲(y) 'では浮動小数点数を扱いコンパイルしません(繰り返します; PY2) 'リスト' – schwobaseggl

+0

それはそれを行うだろう、ありがとう:)私はちょうど私のケースで実際に必要なものを両方の代わりに、どちらかを確認することでした覚えて、ここでそれを行う方法です: (y)for zip(price、budget)): ' – JackHasaKeyboard

2

価格と予算の両方が負でなければならないと仮定すると、in rangeを使用すると、複雑すぎるように見えます。代わりに、<演算子を使用することができます。

最も簡単な方法は、zip両方のリストになるとペアに条件を適用するようにかかわらず、あなたが<in rangeを使用するかどうかの、それはそう:

if (all([x[0] >= x[1] for x in zip(budget, price)])): 
    affordable = True 
関連する問題