如何跳过从 for 循环内部添加到列表的列表元素的循环?

How to skip looping over list elements added to the list from inside a for-loop?

我正在使用 for 循环遍历嵌套列表,如果满足条件,我想在下一个索引处插入一个新的嵌套列表。在下一次迭代中,应该跳过这些新添加的列表。示例:

input_lst = [["a", "b"], ["a", "d"], ["e", "f"]]

for sublst in input_lst:
    if sublst[0] == "a":
        new_sublst = []
        input_lst.insert((input_lst.index(sublst) + 1), new_sublst)
        new_sublst.insert(0, "a")
        new_sublst.insert(1, "z")
    
print(input_lst)

预期结果:

[["a", "b"], ["a", "z"], ["a", "d"], ["a", "z"], ["e", "f"]]

实际结果 - 无限循环:

[["a", "b"], ["a", "z"], ["a", "z"], ["a", "z"], ["a", "z"] ...

您可以使用第二个列表:

input_lst = [["a", "b"], ["a", "d"], ["e", "f"]]
new_sublst = ["a", "z"]
output_lst = []
for sublst in input_lst:
    output_lst.append(sublst)
    if sublst[0] == "a":
        output_lst.append(new_sublst)

输出:

[['a', 'b'], ['a', 'z'], ['a', 'd'], ['a', 'z'], ['e', 'f']]

试试这个:

input_lst = [["a", "b"], ["a", "d"], ["e", "f"]]
result = []

for sublst in input_lst:
    result.append(sublst)
    if sublst[0] == "a":
        result.append(["a", "z"])

print(result)

或者:

input_lst = [["a", "b"], ["a", "d"], ["e", "f"]]

for sublst in input_lst:
    if sublst == ["a","z"]:
        continue
    if sublst[0] == "a":
        new_sublst = []
        input_lst.insert((input_lst.index(sublst) + 1), new_sublst)
        new_sublst.insert(0, "a")
        new_sublst.insert(1, "z")
    
print(input_lst)

结果:

[['a', 'b'], ['a', 'z'], ['a', 'd'], ['a', 'z'], ['e', 'f']]

注意事项:

  1. 如果在当前子列表以“a”开头时将 ["a","z"] 添加为列表中的下一个元素,则创建了一个 endless-loop,因为下一次迭代是绝对以“a”开头,如 ["a", "z"].

  2. 使用一个新的列表来存储每次迭代的结果可以解决问题。或者,当当前子列表为 ["a","z"].

    时,您可以跳过添加另一个 ["a","z"]

添加到针对特定条件进行测试的@ytung-dev 的答案中,我想出了一个解决方案,它使用第二个列表作为否定来进行比较。也许其他人会发现这很有用:

input_lst = [["a", "b"], ["a", "d"], ["e", "f"]]
input_lst_negative = []

for sublst in input_lst:
    if (sublst[0] == "a") and (sublst not in input_lst_negative):
        new_sublst = []
        input_lst.insert((input_lst.index(sublst) + 1), new_sublst)
        new_sublst.insert(0, "a")
        new_sublst.insert(1, "z")
        input_lst_negative.append(new_sublst)
    
print(input_lst)

输出:

[['a', 'b'], ['a', 'z'], ['a', 'd'], ['a', 'z'], ['e', 'f']]