代码在下面
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")
代码无限循环且不抛出任何输出
预期为['CDEA', 'CDEABA']
是否有其他替代方法可以执行此操作,例如for i in range(len(masterstring))
答案 0 :(得分:1)
current_pos
和end_pos
始终设置为相同的值,因此while条件始终为True
。
实际上,分配给它们的第一个值是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=['', '', '', '']
current_pos=2, end_pos = 0
result=['', '', '', '', '']
...
查看值如何不变,它们将永远不会使while循环停止。此外,结果每次都附加masterstring[2:0]
,这是空字符串。
答案 1 :(得分:1)
在这里,您基于代码的方法:
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")
答案 2 :(得分:1)
在我心中一个简单的解决方案。时间复杂度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"))