1

どちらも数値を含む 2 つのリストがあり、一方のリストの数値が他方のリストの 2 つの数値の間にある数値であるかどうかを確認したいですか? 「その他」のリストには、2 つの数字ごとに 234、238、567、569、2134、2156 のような間隔になるように数字が並べられています。

ListA = [200, 765, 924, 456, 231]

ListB = [213, 220, 345, 789, 12, 45]

ListA[0:] が ListB[0:1] または [2:3] などの間の数値であるかどうかを確認したい.

私はこれを試しました:

for i in range(0,len(ListB), 2):
    for x in ListA:
        if i < x < (i:i+2):
            print 'within range'

しかし、「i:i+2」の構文エラーが発生します:(

4

3 に答える 3

4

リスト A のすべての項目が、リスト B の少なくとも 1 つの間隔内にあることを確認する場合は、次のようにします。

>>> listA = [200, 765, 924, 456, 231]
>>> listB = [213, 220, 345, 789, 12, 45]

>>> intervals = zip(*[listB[i::2] for i in range(2)])

>>> [any(low < x < high for low, high in intervals)
                    for x in listA]
[False, True, False, True, False]
于 2012-12-18T19:10:16.887 に答える
2

明確ではありませんが、これはあなたが望むものだと思います

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+2slice(i, i+2)

また、説明から、コード内のとだけでなく、とxの値ListB[i]と比較したいと考えています。ListB[i+1]ii+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]

から要素のペアのリストを作成するためのより読みやすい方法があるかどうかを検討することをお勧めしますListBitertools内包表記やジェネレーター式 (私が推測する)についてまだ知らず、一覧表示する必要がない場合は、おそらくかなり冗長で明示的なものを作成する必要がありますが、いずれにせよ役に立つ練習になる可能性があります。

于 2012-12-18T19:04:22.053 に答える
0
for i in range(0,len(ListB)-1, 2): #offest 1 less than the length
    for x in ListA:
        if ListB[i] < x < ListB[i+1]: #check if it is between ListB's elements
            print 'within range'

少なくとも、あなたが何を望んでいるかを私が理解していると仮定すると...

于 2012-12-18T19:04:09.743 に答える