簡體   English   中英

if-else在while語句中

[英]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 = 11target.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM