How can I loop through a string and print certain items?

后端 未结 3 560
时光说笑
时光说笑 2021-01-23 00:24
lst = \'AB[CD]EF[GH]\'

Output: [\'A\',\'B\',\'CD\',\'E\',\'F\',\'GH\']

This is what I\'ve tried but it\'s not working...

while         


        
相关标签:
3条回答
  • 2021-01-23 00:34

    The problems with the original code seemed to be:

    1) lst, index and multi are not initialised

    2) the loop is infinite because the loop variable (index) isn't incremented on each iteration.

    3) the close bracket needs to be skipped when detected to avoid including it in the final list

    This code is an example of how to fix those issues:

    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]'))
    
    0 讨论(0)
  • 2021-01-23 00:36

    Please try the following code snippet.

    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)
    
    0 讨论(0)
  • 2021-01-23 00:40

    You can't use

    lst += multi
    

    because you can't concatenate a string with a list.

    Moreover, your code enters an infinite loop, because you aren't updating the curr_char variable inside the inner loop, so the condition will always be True.

    Also, you are not handling the case when curr_char != '['. And more errors there are.

    You can use this code which fixes the above errors while using the same basic logic as your code:

    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)
    

    Output:

    ['A', 'B', '[CD]', 'E', 'F', '[GH]']
    
    0 讨论(0)
提交回复
热议问题