Home > Back-end >  While loop does not seem to loop over after 1 iteration
While loop does not seem to loop over after 1 iteration

Time:09-25

G'day. I am new to coding and python.

My goal is to try to create a code where if the element in y reaches the next 0, all the 0 to n (before the next zero) will become n. A sample output should look like this after executing the code below:

y = [0,1,2,3,4,5,6,7,8,0,1,0,1,2,3,4,5,6,7]

# I am interating over two inputs. y_1 = y[1:] and append 0 at the end.
y_1 = [1,2,3,4,5,6,7,8,0,1,0,1,2,3,4,5,6,7,0]

expected output:
x = [8, 8, 8, 8, 8, 8, 8, 8, 8, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7]

The problem I'm facing I believe comes from the while loop not looping over after [0,1,2,3,4,5,6,7,8] is deleted from the list as specified in the code below (which logically to me should loop over?) :

y = [0,1,2,3,4,5,6,7,8,0,1,0,1,2,3,4,5,6,7]
y_1 = [1,2,3,4,5,6,7,8,0,1,0,1,2,3,4,5,6,7,0]

x = []

while len(y):
    for i, j in zip(y, y_1):
        if i > j:
            z = i
        
            for k in range(z 1):
                x.append(y[i])
            
            del y[0:z 1]
            del y_1[0:z 1]
    
        elif i == j:
            z = 0
            
            x.append(z)
            
            del y[z]
            del y_1[z]

Any suggestion would be greatly appreciated :)

CodePudding user response:

I don't know why you use del and while because you should get expected result doing

y   = [0,1,2,3,4,5,6,7,8,0,1,0,1,2,3,4,5,6,7]
y_1 = y[1:]   [0]

x = []

for i, j in zip(y, y_1):
    if i > j:
        z = i
        for k in range(z 1):
            x.append(y[i])
    elif i == j:
        z = 0
        x.append(z)

print(x)

In Python you shouldn't delete element from list which you use as for-loop because when it delete element then it moves other elements in list used as for-loop and it can give unexpected results.
If you really want to run it in some while len(y) then you should rather create new list with elements which you want to keep. Or you should duplicate list - y_duplicated = y.copy() - and delete in duplicated list and after for-loop replace original list y = y_duplicated

  • Related