2010-07-13 113 views
3

我怎樣才能做這樣的事情:蟒蛇範圍發生

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

與此相關,xrange()對象如何比較?我的意思是你可以嘗試'xrange(4,10) 2010-07-14 00:38:49

+0

另外,反轉範圍的情況如何 - 是xrange(3,20)'中的xrange(9,3,-1)?這兩個範圍都必須倒置或適合作爲集?如果其中一個範圍存在差距(使用了步驟),該怎麼辦? – 2010-07-14 00:41:51

回答

5

(min1 >= min2) and (max1 <= max2)怎麼樣?

(假設min1, max1 = 4, 10min2, max2 = 3, 20

注意:您要比較端點沒有實際上使/評估的範圍,否則這將是可怕的效率低下。

編輯:這也適用;不是更好,而是更漂亮IMO:min2 <= min1 <= max1 <= max2

+1

不應該是'min2 <= min1 <= max1 <= max2'? – 2010-07-13 11:44:33

+0

@jellybean - 取決於你是否想要「嚴格」的子範圍;但我認爲這是更好的默認選項。改變。 – tzaman 2010-07-13 11:50:25

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]'。 – 2010-07-13 11:30:19

+0

@jleedev:聰明的筆記,但如果其中一個範圍是倒置的,也就是說,一個負數被用作步驟? ;-) – 2010-07-14 00:43:22

+0

@Nas Banov:好點。您應該使用[0]和[-1]的最小值以及[0]和[1]的最大值。如何元。 – 2010-07-14 04:21:21

4

如果你被包含在另一組尋找一組,嘗試:

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

如果您希望比較端點,因爲您總是使用範圍來比較,您可以比較@ zoli2k等端點。

[編輯]編輯被要求。

+0

我爲什麼會陷入低谷?至少留下令人討厭的評論! – 2010-07-14 02:14:38

+1

首先,我認爲'set()'的使用效率很低,但現在我意識到這是唯一可以用step!= 1的範圍正確工作的解決方案,例如範圍(1,30,3)'或範圍(30,1,-1)'。 ++ – 2010-07-14 04:28:26

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運算符要快得多。