'continue' 'for' 循环到前一个元素

'continue' the 'for' loop to the previous element

我一直在努力寻找一种方法 continue 我的 for 循环到前一个元素。很难解释。

两个说清楚,举个例子:

foo = ["a", "b", "c", "d"]

for bar in foo:
    if bar == "c":
        foo[foo.index(bar)] = "abc"
        continue
    print(bar)

在执行此代码时,当循环到达 'c' 时,它会看到 bar 等于 'c',它会替换列表中的 'c'continues 到下一个元素 & 不打印 bar。当 if 条件为真时,我希望它在替换后循环回到 'b'。所以它将再次打印 'b' 就像循环从未到达 'c'

背景:我正在做一个项目。如果出现任何错误,我必须从上一个元素继续解决这个错误。

这是流程图,如果对你有帮助的话:

除了我所做的替换之外,我不想修改我现有的列表。我尝试搜索每个不同的关键字,但没有找到类似的结果。

如何继续循环到当前元素的前一个元素?

for 循环中,您不能更改迭代器。请改用 while 循环:

foo = ["a", "b", "c", "d"]
i = 0
while i < len(foo):
    if foo[i] == "c":
        foo[foo.index(foo[i])] = "abc"
        i -= 1
        continue
    print(foo[i])
    i += 1    

这里当i对应的值等于c时元素会变为你的请求并返回一步,重印babc,最后d:

foo = ["a", "b", "c", "d"]
i = 0
while i < len(foo):
    if foo[i] == "c":
        foo[i] = "abc"
        i -= 1
        continue
    print(foo[i])
    i += 1
import collections
left, right = -1,1
foo = collections.deque(["a", "b", "c", "d"])
end = foo[-1]
while foo[0] != end:
    if foo[0] == 'c':
        foo[0] = 'abc'
        foo.rotate(right)
    else:
        print(foo[0])
        foo.rotate(left)
print(foo[0])

我想使用 for 所以我自己创建了代码。我不想修改我的原始列表,所以我复制了原始列表

foo = ["a", "b", "c", "d"]
foobar = foo.copy()

for bar in foobar:
    if bar == "c":
        foobar[foobar.index(bar)] = "abc"
        foo[foo.index(bar)] = "abc"
        del foobar[foobar.index("abc")+1:]
        foobar += foo[foo.index("abc")-1:]
        continue
    print(bar)

它按预期打印:

a
b
b
abc
d

我原来的列表现在也是:

['a', 'b', 'abc', 'd']