使用列表理解从基于索引的多个列表中删除值的更好方法
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时, 它是空的。
我们能否比下面的逻辑做得更好,前提是我想知道我们是否可以使用列表理解。
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时, 它是空的。