Home > other >  Two different results
Two different results

Time:07-22

The below code provides the results I want (move the number to the front and 0 to the end of the list) on programminghero's playground. When I put it in a jupyter notebook the result is all 0's. So, move_zero([0,1,0,2,0,3,0,5]) should return [1,2,3,5,0,0,0,0] but in jupyter it returns [0,0,0,0,0,0,0,0].

def move_zero(lst):

    new_list = lst
    counter = 0
    for each in new_list:
        if each == 0:
            new_list.pop(counter)
            new_list.append(0)
            counter -= 1
        counter  = 1
    return new_list
        
print(move_zero([0,1,0,2,0,3,0,5]))

CodePudding user response:

It is recommended that you avoid modifying a list while iterating over the list. It is usually better to construct a new list:

def move_zero(lst):
    non_zeros, zeros = [], []
    for x in lst:
        if x == 0:
            zeros.append(x)
        else:
            non_zeros.append(x)
    return non_zeros   zeros

print(move_zero_new([0,1,0,2,0,3,0,5])) # [1, 2, 3, 5, 0, 0, 0, 0]

CodePudding user response:

redacted -- code had bug, not sure why it was accepted lol

  • Related