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