明確ではありませんが、これはあなたが望むものだと思います:
for i in range(0, len(ListB), 2):
for x in ListA:
if ListB[i] < x < ListB[i+1]:
print 'within range'
「範囲」を表すことができるという直感は正しいですがi:i+2
、それほどではありません。list
この構文は、 :をスライスする場合にのみ使用できます。期待どおり、ListB[i:i+2]
2 つの要素だけを含む小さなリストが返されますが、それ自体は違法です。(本当にやりたいのであれば、何を目指しているかを意味するように書くことができますが、ここではそれほど役に立ちません。)[ListB[i], ListB[i+1]]
i:i+2
slice(i, i+2)
また、説明から、コード内のとだけでなく、とx
の値ListB[i]
と比較したいと考えています。ListB[i+1]
i
i+1
スライスを使用して範囲を生成したい場合は、そうすることができますが、間接的にしかできません。実際には、ほとんどの点で扱いにくく、さらに悪い結果になります。
for i in range(0, len(ListB), 2):
brange = range(*ListB[i:i+2])
for x in ListA:
if x in brange:
print 'within range'
しかし、これは開いた範囲ではなく半分開いた範囲をチェックしているため、範囲を表すリストを作成し、全体をウォークスルーする必要があり、整数に対してのみ機能します。したがって、それはおそらくあなたが望むものではありません。を明示的に使用することをお勧めしますListB[i] < x < ListB[i+1]
。
から要素のペアのリストを作成するためのより読みやすい方法があるかどうかを検討することをお勧めしますListB
。itertools
内包表記やジェネレーター式 (私が推測する)についてまだ知らず、一覧表示する必要がない場合は、おそらくかなり冗長で明示的なものを作成する必要がありますが、いずれにせよ役に立つ練習になる可能性があります。