While 循环在 1 次迭代后似乎没有循环

While loop does not seem to loop over after 1 iteration

你好。我是编码新手 python.

我的目标是尝试创建一个代码,如果 y 中的元素达到下一个 0,则所有 0 到 n(在下一个零之前)都将变为 n。执行以下代码后,示例输出应如下所示:

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]

我认为我面临的问题是在 [0,1,2,3,4,5,6,7,8] 从列表中删除后 while 循环没有循环,如以下代码中指定的(逻辑上我应该循环?):

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]

任何建议将不胜感激:)

我不知道你为什么使用 delwhile 因为你应该得到预期的结果

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)

在 Python 中,您不应从用作 for-循环的列表中删除元素,因为当它删除元素时,它会移动用作 for- 的列表中的其他元素循环,它会产生意想不到的结果。
如果你真的想 运行 它在一些 while len(y) 中,那么你应该创建一个包含你想要保留的元素的新列表。或者你应该复制列表 - y_duplicated = y.copy() - 并在重复列表中删除并在 for 循环之后替换原始列表 y = y_duplicated