如何循环字符串并打印某些项目?

时间:2017-11-13 01:22:09

标签: python loops

lst = 'AB[CD]EF[GH]'

输出:[' A',' B'' CD',' E'' F' ,' GH']

这是我尝试过的,但它不起作用......

while(index < len(my_string)):
 curr_char = my_string[index]
 if(curr_char == '['):
      while(curr_char != ']'):
           multi = my_string[index + 1]
           index += 1
lst += multi

有人可以帮忙吗?没有导入正则表达式或其他什么。我想在不使用它的情况下这样做。

3 个答案:

答案 0 :(得分:2)

原始代码的问题似乎是:

1)lst,index和multi未初始化

2)循环是无限的,因为循环变量(索引)在每次迭代时都不会递增。

3)检测时需要跳过关闭括号以避免将其包括在最终列表中

此代码是如何解决这些问题的示例:

def getList(s):
    outList=[]
    lIndex=0
    while lIndex < len(s):
        if s[lIndex] == "[":
            letters=""
            lIndex+=1
            while s[lIndex] != "]":
                letters+=s[lIndex]
                lIndex+=1
            outList.append(letters)
        else:
            outList.append(s[lIndex])
        lIndex+=1
    return outList

print(getList('AB[CD]EF[GH]'))

答案 1 :(得分:1)

您无法使用

lst += multi

因为你不能将字符串与列表连接起来。

此外,您的代码进入无限循环,因为您没有更新内循环内的curr_char变量,因此条件始终为True

此外,您在curr_char != '['时没有处理此案例。还有更多的错误。

您可以使用此代码修复上述错误,同时使用与代码相同的基本逻辑:

index = 0
multi = ""
res = []
my_str = 'AB[CD]EF[GH]'

while (index < len(my_str)):
    curr_char = my_str[index]
    if curr_char == '[':
        multi += curr_char
        while curr_char != ']':
            index += 1
            curr_char = my_str[index]
            multi += curr_char
        res.append(multi)
        multi = ""
    else:
        res.append(curr_char)
    index += 1

print(res)

输出:

['A', 'B', '[CD]', 'E', 'F', '[GH]']

答案 2 :(得分:0)

请尝试以下代码段。

my_string = 'AB[CD]EF[GH]'

lst = []
ind = 0
n = len(my_string)

while (ind < n):
    if my_string[ind] == '[':
        # if '[' is found, look for the next ']' but ind should not exceed n.
        # Your code does not do a ind < n check. It may enter an infinite loop.
        ind += 1 # this is done to skip the '[' in result list
        temp = '' # create a temporary string to store chars inside '[]'
        while ind < n and my_string[ind] != ']':
            temp = temp + my_string[ind]
            ind+=1
        lst.append(temp) # add this temp string to list
        ind += 1 # do this to skip the ending ']'.
    else:
        # If its not '[', simply append char to list.
        lst.append(my_string[ind])
        ind += 1

print(lst)