首页 > 解决方案 > 为什么在我运行此代码后 [8,9] 仍然在 lst

问题描述

这是我的代码:

lst=[[6,7],[8,9],[10,11], [12, 14], [13, 18]]
lst.sort()
lst1=[]
for i in range(len(lst)-1):
    if lst[i][-1]<lst[i+1][0]:
        lst1.append(lst[i])
print(f'lst1 = {lst1}')
for i in lst:
    if i in lst1:
        lst.remove(i)
print(lst,'and',lst1)

结果如下:

lst1 = [[6, 7], [8, 9], [10, 11]]
[[8, 9], [12, 14], [13, 18]] and [[6, 7], [8, 9], [10, 11]]

我不知道为什么 [6,7] 和 [10,11] 被删除但 [8,9] 仍然存在,我该如何解决?

标签: pythonlist

解决方案


迭代列表的副本而不是列表:

for i in lst[:]:
    if i in lst1:
        lst.remove(i)

让我们看看问题:

[[6, 7], [8, 9], [10, 11], [12, 14], [13, 18]]

当您遍历列表时,您删除了第一个元素。所以现在的清单是:

[[8, 9], [10, 11], [12, 14], [13, 18]]

[8,9]已转移到第一个位置,但迭代只会继续前进。所以现在[10,11]被删除了。

所以左边的部分:

[[8, 9], [12, 14], [13, 18]]

推荐阅读