python - 为什么在我运行此代码后 [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] 仍然存在,我该如何解决?
解决方案
迭代列表的副本而不是列表:
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]]
推荐阅读
- c# - 二维 ArrayList 返回 System.String[]
- c++ - C++ 复制函数重载导致“必须是非静态成员函数”错误
- python - 如何将此 SQL 查询转换为 SQLAlchemy
- angularjs - Angularjs 无法通过 $routeParams 来创建 $resource 的操作
- python - 如何使用包含文件名和标签的数据框将具有类标签的图像从单个目录加载到 Keras 模型中?
- javascript - 如何在循环中运行上一个/下一个按钮?
- python - 使用标签类型从 pandas 数据框中分离数据
- java - textArea.append () 格式化以将 3 个字符串(1 个已解析的 Int)和一个 Double 与它们在 JTextArea 中的标题对齐
- c# - 旋转时改变运动方向
- virtualbox - 什么是 VirtualBox 强化?