【问题标题】:While loop does not seem to loop over after 1 iteration1 次迭代后,while 循环似乎没有循环
【发布时间】:2021-11-17 22:01:03
【问题描述】:

G'day。我是编码和 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]

任何建议将不胜感激:)

【问题讨论】:

  • 您不应该从您正在迭代的列表中删除。
  • y_1,在这段代码中,是 y[1:],末尾追加 0
  • 不要使用del,因为这会更改您在for-loop - zip(y, y_1) 中使用的列表 - 它可以在您预期之前停止它。此外,您无需删除它即可获得预期结果。并删除while len(y) - 你也不需要它。
  • 较短的y_1 = y[1:] + [0]

标签: python list while-loop


【解决方案1】:

我不知道你为什么使用 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-loop 的列表中删除元素,因为当它删除元素时,它会移动用作 for-loop 的列表中的其他元素,并且可能会产生意想不到的结果。
如果您真的想在某些 while len(y) 中运行它,那么您应该使用要保留的元素创建新列表。或者您应该重复列表 - y_duplicated = y.copy() - 并在重复列表中删除,然后在 for-loop 替换原始列表 y = y_duplicated

【讨论】:

  • 谢谢!这有助于解决我的问题。 :) 我的逻辑是删除元素,因此索引应该从 0 开始。因此,使用 while 循环直到原始列表为空。在循环操作中删除列表时,我没有意识到意外结果。
猜你喜欢
  • 1970-01-01
  • 2015-03-23
  • 2019-10-11
  • 2016-03-13
  • 2021-01-26
  • 2012-05-28
  • 2018-03-15
  • 2014-10-11
  • 2016-04-23
相关资源
最近更新 更多