[英]If-else inside a while statement
學習使用Python 3進行編碼。我很困惑為什么我的else
語句繼續使用以下代碼執行:
def countSubStringMatch(target, key):
index = 0
instance_list = []
while index <= len(target):
match = target.find(key,index)
if match > -1:
instance_list.append(match)
index += 1
elif match == -1:
return None
return sorted(set((instance_list)))
target1 = 'mjzzmjzzmjzz'
key1 = 'zz'
print(countSubStringMatch(target1, key1))
這段代碼的重點是列出鍵開始的索引。 當目標中存在鍵的實際實例時,我的代碼運行良好,但是我嘗試對其進行編輯以在沒有實例時返回None
。 這是我編輯之前的代碼:
def countSubStringMatch(target, key):
index = 0
instance_list = []
while index <= len(target):
match = target.find(key,index)
if match > -1:
instance_list.append(match)
index += 1
return sorted(set((instance_list)))
target1 = 'mjzzmjzzmjzz'
key1 = 'zz'
print(countSubStringMatch(target1, key1))
隨着索引的增加, 最終您將始終獲得-1
。 所以是的,您的elif
將會匹配,並且最終返回None
:
>>> target1 = 'mjzzmjzzmjzz'
>>> key1 = 'zz'
>>> target1.find(key1, 0)
2
>>> target1.find(key1, 3)
6
>>> target1.find(key1, 7)
10
>>> target1.find(key1, 11)
-1
因此,當index = 11
, target.find()
返回-1
作為樣本輸入。 由於len(target)
為12,因此仍在循環中。
僅當instance_list
為空時返回None
。 此外,增加索引來逐步進行最后發現指數,存在遞增按1指數是沒有意義的; 這樣,您可以避免所有重復的索引,並且無需使用集合:
def countSubStringMatch(target, key):
index = 0
instance_list = []
while index <= len(target) - len(key):
match = target.find(key, index)
if match == -1:
break
instance_list.append(match)
index = match + 1
return instance_list or None
從等於目標長度減去鍵長度的索引進行搜索毫無意義; 您不會在索引11處找到密鑰。
如果未找到匹配項,則返回None
而不是列表。 您可能需要重新考慮這一點; 測試一個空列表同樣簡單,並使您的API保持一致(始終返回一個列表,該列表可能為空):
>>> target1 = 'mjzzmjzzmjzz'
>>> key1 = 'zz'
>>> countSubStringMatch(target1, key1)
[2, 6, 10]
>>> countSubStringMatch(target1, 'foo') is None
True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.