簡體   English   中英

為什么我的代碼在執行 while 循環時不起作用

[英]Why my code not working while executing while loop

代碼如下

def stringtofind(masterstring, startchar, endchar):
    result = []
    current_pos = masterstring.find(startchar) 
    while current_pos != -1:     
        end_pos = masterstring.find(endchar)
        result.append(masterstring[current_pos:end_pos]) 
    return result
stringtofind("ABCDEABA", "C", "A")

代碼無限循環,不拋出任何 output

預期結果是['CDEA', 'CDEABA']

是否有任何替代方法可以執行此操作,例如for i in range(len(masterstring))

current_posend_pos始終設置為相同的值,因此 while 條件將始終為True

實際上分配給它們的第一個值是current_pos=2end_pos=0這導致將相同的空列表附加到result

這是output的日志:

current_pos=2, end_pos = 0
result=['']
current_pos=2, end_pos = 0
result=['', '']
current_pos=2, end_pos = 0
result=['', '', '']
current_pos=2, end_pos = 0
result=['', '', '', '']
current_pos=2, end_pos = 0
result=['', '', '', '', '']
...

看看這些值是如何不改變的,它們永遠不會使 while 循環停止。 此外,結果每次都附加masterstring[2:0] ,即空字符串。

在這里,您的基於代碼的方法:

def stringtofind(masterstring, startchar, endchar):
    result = []
    current_pos = masterstring.find(startchar) 
    for i in range(current_pos,len(masterstring)+1):
        if(masterstring[i] != endchar): return
        result.append(masterstring[current_pos:i]) 
    return result
stringtofind("ABCDEABA", "C", "A")

我心中的一個簡單的解決方案。 時間復雜度 O(n^2)。

def stringtofind(masterstring, startchar, endchar):
    result = []
    start_ids = []
    n = len(masterstring)
    for i in range(n):
        if masterstring[i] == startchar:
            start_ids.append(i)
        if masterstring[i] == endchar:
            for j in start_ids:
                result.append(masterstring[j:i+1])
    return(result)

print(stringtofind("ABCDEABA", "C", "A"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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