Python从列表中删除项目

Die*_*len 4 python nested-lists

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

[['John', 'Smith'], ['Linus', 'Torvalds'], ['Bart', 'Simpson']]
Run Code Online (Sandbox Code Playgroud)

列表中有一些这样的元素['Linus Torvalds',''],我想删除它们.那么为什么以下代码不能删除它们呢?

for i in people:
    if(i[0] == '' or i[1] == ''):
        print people.pop(people.index(i))
Run Code Online (Sandbox Code Playgroud)

650*_*502 10

您正在迭代它时更改列表,这是您的问题的根源.一种有效的方法是

people[:] = [p for p in people if p[0] != '' and p[1] != '']
Run Code Online (Sandbox Code Playgroud)

这样就构建了一个只包含所需元素的新临时列表,然后在操作完成时将其分配给原始列表对象.

  • 如果你想得到相同的*list对象*,你可以用`people [:] = [p for p in ...`替换赋值,这样,列表理解的结果就会被填充回来原始清单. (2认同)