Skip to main content
 首页 » 编程设计

python之删除列表中对应于 'None' 的元素

2025年05月04日16hnrainll

我有两个列表

x = [ None , None , "foo" , "bar" ] 
y = [ "bar" , "foo" , "foo" ,"bar"] 
 
len(x) == len(y) 

我想检查列表 x 中是否存在 None 的元素,然后删除该元素并删除 y 中的相应元素。 比如删除 x[0] == None ,所以从 x 中删除 x[0] 和 y[0] > 和 y

结果应该是:

x = ["foo","bar"] 
y = ["foo","bar"] 

我尝试了一种完全非 pythonic 的方式,它给了我一个“列表索引超出范围”的错误:

for i in range(0,len(x)): 
    if(x[i] == None): 
        x.remove(x[i]) 
        y.remove(y[i]) 

请您参考如下方法:

使用 zip你可以很好地做到这一点的方法:

x, y = zip(*[(e_x, e_y) for e_x, e_y in zip(x, y) if e_x is not None]) 

在这里,您一次遍历两个列表,创建一个新列表,其元组包含 x 和 y 的元素。只有当来自 x e_x 的元素不是 None 时,才会添加这些元组。 外部 zip 将元组列表转换回两个单独的列表。

编辑:正如大金刚在评论中指出的那样,最好使用 is not None 而不是 != None。我相应地更新了代码。