为什么此代码变成无限循环?

时间:2019-10-03 17:15:23

标签: python string while-loop find substring

我正在尝试编写一个代码,该代码查找给定字符串的子字符串的位置。我认为循环中存在一些问题,事实证明这是一个无限循环。

string="ABCDCDC"
sub_str="CDC"
i=0
while i<len(string):
    if sub_str in string:
        i=string.find(sub_str,i)
        print("Position is {}".format(i))
    else:
        break
    i+=1

我得到的实际输出:

Position is 2
Position is 4
Position is -1
Position is 2
Position is 4
Position is -1
Position is 2
Position is 4
Position is -1

预期输出:

Position is 2
Position is 4

1 个答案:

答案 0 :(得分:0)

您正在覆盖“ i”,因此它变成了无限循环。其次,您可以使用列表来保留索引(满足成功条件的索引)的引用,以避免重新打印索引以及-1。这是您代码的改进。

string = "ABCDCDC"
sub_str = "CDC"
i = 0
list = []
size = len(string)
while i < size:
    if sub_str in string:
        pos = string.find(sub_str, i, size)
        if pos != -1 and pos not in list:
            print("Position is {}".format(pos))
            list.append(pos)
    else:
        break
    i += 1
相关问题