使用列表理解从基于索引的多个列表中删除值的更好方法

Better way to delete values from Multiple lists based on Index using list comprehension

我们能否比下面的逻辑做得更好,前提是我想知道我们是否可以使用列表理解。

FruitsList = ["apples","mangoes","banana","grapes","peaches","kiwi"]
numbersList = [1,2,None,5,None,100]

for num in numbersList:
    if num == None:
        indexnum = numbersList.index(None)
        print indexnum
        del numbersList[indexnum]
        del FruitsList [indexnum]

print FruitsList #['apples', 'mangoes', 'grapes', 'peaches']
print numbersList #[1, 2, 5, 4]

也许可以试试这样的东西

[FruitsList[i] for i in range(0, min(len(FruitsList), len(numbersList))) if not numbersList[i] is None]

我想你想要这样的东西:

s = [(a, b) for (a,b) in zip(FruitsList, numbersList) if b is not None]
FruitsList = [x[0] for x in s]
numbersList = [x[1] for x in s]

但这给出了

['apples', 'mangoes', 'grapes', 'kiwi']

正如我在评论中所说的那样,为了水果。如果这不对,请告诉我,我会修改这个答案(或删除它)。

编辑:请注意,我必须将 s 从带有外括号的生成器理解更改为带有外方括号的列表理解。 generator comprehension 构建一个generator,节省内存,而且可能更快,但是你只能迭代一次,所以在构建FruitsList之后,generator是空的,当我们再次尝试迭代它构建numbersList时, 它是空的。