Python从lis中删除项

2024-05-17 01:14:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个给定格式的列表:

[['John', 'Smith'], ['Linus', 'Torvalds'], ['Bart', 'Simpson']]

列表中有一些类似的元素['Linus Torvalds',''],我想删除它们。那么为什么下面的代码不删除它们呢?

for i in people:
    if(i[0] == '' or i[1] == ''):
        print people.pop(people.index(i))

Tags: or代码in元素列表forif格式
3条回答

您在遍历列表时正在更改列表,这是问题的根源。有效的方法是

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)]

相关问题 更多 >