2024-05-17 01:14:37 发布
网友
我有一个给定格式的列表:
[['John', 'Smith'], ['Linus', 'Torvalds'], ['Bart', 'Simpson']]
列表中有一些类似的元素['Linus Torvalds',''],我想删除它们。那么为什么下面的代码不删除它们呢?
for i in people: if(i[0] == '' or i[1] == ''): print people.pop(people.index(i))
您在遍历列表时正在更改列表,这是问题的根源。有效的方法是
people[:] = [p for p in people if p[0] != '' and p[1] != '']
这样,将生成一个新的临时列表,其中仅包含所需的元素,然后在操作完成时将其分配给原始列表对象。
在遍历列表时,您正在修改列表的长度。这会导致您跳过值。当您从列表中弹出一个项目时,将发生以下情况(stealing from this answer):
[1, 2, 3, 4, 5, 6...] ^
这是列表最初的状态;现在假设1被移除,循环转到列表中的第二项:
[2, 3, 4, 5, 6...] ^
等等。
如果你想调整列表的大小,甚至是people[:] = [p for p in people if all(p)]。
people[:] = [p for p in people if all(p)]
您在遍历列表时正在更改列表,这是问题的根源。有效的方法是
这样,将生成一个新的临时列表,其中仅包含所需的元素,然后在操作完成时将其分配给原始列表对象。
在遍历列表时,您正在修改列表的长度。这会导致您跳过值。当您从列表中弹出一个项目时,将发生以下情况(stealing from this answer):
这是列表最初的状态;现在假设1被移除,循环转到列表中的第二项:
等等。
如果你想调整列表的大小,甚至是
people[:] = [p for p in people if all(p)]
。相关问题 更多 >
编程相关推荐