2010-07-13 4 views
3

가 어떻게 같은 것을 할 수 있습니다파이썬 범위 발생

>>> xrange(4, 10) in xrange(3, 20) 
TRUE 
+0

이와 관련하여'xrange()'객체를 어떻게 비교합니까? 제 말은'xrange (4, 10)

+0

또한 역전 된 대소 문자는 xrange (3, 20)에서'xrange (9, 3, -1)입니까? 두 범위가 뒤바뀌거나 세트로 적합해야합니까? 범위 중 하나에 간격이있는 경우 (단계가 사용 된 경우)? –

답변

5

어때 대략 (min1 >= min2) and (max1 <= max2)?

주 (min1, max1 = 4, 10min2, max2 = 3, 20 가정) : 당신은 실제로 범위를 평가/제작없이 엔드 포인트 을 비교하려면, 그렇지 않으면 끔찍하게 비효율적 일 수 있습니다.

편집 :이 또한 작동합니다. IMO하지 않는 것이 좋습니다,하지만 예뻐 : min2 <= min1 <= max1 <= max2

이 개 범위를 감안할 때
+1

'min2 <= min1 <= max1 <= max2'이 아니어야합니까? –

+0

@jellybean - "엄격한"하위 범위를 원하는지 여부에 달려 있습니다. 하지만 기본 옵션으로 더 좋습니다. 변경됨. – tzaman

0
>>>min(xrange(4, 10)) > min(range(3, 20)) and max(xrange(4, 10)) < max(range(3, 20)) 
True 
+3

'xrange '에'min'과'max'를 사용하는 것은 비효율적입니다. '[0]'과'[-1]'을 대신 사용하십시오. –

+0

@jleedev : 영리한 음표 그러나 범위 중 하나가 반전 된 경우, 즉 음수가 단계로 사용 된 경우 어떻게됩니까? ;-) –

+0

@Nas Banov : 좋은 지적입니다. [0]과 [-1]의 min과 [0]과 [1]의 max를 사용해야합니다. 어떻게 메타. –

4

가 다른 세트에 포함 된 한 세트를 찾고 있다면, 시도 :

>>> set(xrange(4, 10)).issubset(set(range(3,20)) 

@ zoli2k와 같은 끝점을 비교하는 것보다 항상 범위를 사용할 것이므로 끝점을 비교하려고합니다.

[편집] 편집을 요청했습니다.

+0

왜 지구상에서 나는 downvoted을 얻었습니까? 적어도 뒤에 불쾌한 코멘트를 남겨주세요! –

+1

처음에는'set()'을 사용하는 것이 비효율적이라고 생각했지만 이제는 단계가있는 범위에서 올바로 작동하는 유일한 해결책이라는 것을 알았습니다. range (1,30,3) 또는 range (30,1, -1)입니다. ++ –

0

,이 작업을 수행 할 수 있습니다

>>> a = range(10) 
>>> b = range(5,15) 
>>> c = range(15,25) 
>>> any(x in a for x in b) 
True 
>>> any(x in a for x in c) 
False 

이 약간 비효율적이며, 매우 큰 (100 개 + 요소)이있는 경우 검사 범위, 그것은 더 a 유형이 목록 대신 '설정'되어 있어야합니다. 즉 :

>>> a = set(range(10)) 

세트 순서를 가지고 있지 않지만, in 운영자가 훨씬 빠릅니다.

관련 문제