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



我正在使用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"]]
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","z"]作为列表中的下一个元素,当当前子元素以"a"开始时,您创建了一个无限循环,因为下一次迭代肯定以"a"开始;如["a", "z"]。

  2. 使用一个新的列表来存储每次迭代的结果可以解决这个问题。或者,当当前子主题为["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']]

添加@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']]

最新更新