我有两个列表
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。我相应地更新了代码。
