2014-07-15 48 views
1

是否有一種優雅的方法來檢查實例方法str.find()返回的值-1?我發現測試值爲-1非常難看,但我不想說< 0,因爲這可能會導致混淆。在Python中對-1進行優雅檢查

if (myString.find('foo') == -1): 
    print("foo not found in ", myString) 
+0

我想知道是否在處理器級別更好地優化'== -1'或'<0'。如果處理器很聰明,那麼'<0'只需要檢查一個位,這非常快。雖然我的計算機體系結構課程已經過了很長時間。 – TheSoundDefense

+2

@TheSoundDefense:這是Python,而不是C; '-1'和'0'是對象,在CPython的情況下,它恰好是被攔截的(所有的小整數都在-1和255之間),所有Python必須做的就是在使用'=='時測試指針是否相等。 。 –

+0

@MartijnPieters我沒有考慮過。我所有的C學習都回來咬我與Python的工作。我需要重新訓練我的大腦。 – TheSoundDefense

回答

13

不要使用str.find()如果你不需要索引。使用in來測試子字符串;或者在這種情況下not in否定測試:

if 'foo' not in myString: 
    print("foo not found in", myString) 
+0

謝謝,我不知道'在'存在! – TheMathemagician

3

作爲參考,在你需要的指數的情況下,有一個發現它另一個字符串實例方法:str.index

str.indexstr.find之間的區別是,str.indexraise ValueError如果沒有找到子串,(如果您預計子一般存在EG)這可能是更適合你的使用情況:

try: 
    index = myString.index("foo") 
except ValueError: 
    print("'foo' not found in '{0}'.".format(myString)) 
else: 
    # 'foo' was found, 'index' has been assigned