[英]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_pos
和end_pos
始終設置為相同的值,因此 while 條件將始終為True
。
實際上分配給它們的第一個值是current_pos=2
和end_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.