2017-04-23 150 views
0

我想刪除列表中的空列表和NoneType列表。這是一個例子。Python-列表理解。從列表中刪除NoneType或emty列表

new_pop=[[[0,1,2,3],[4,5,6]],[[],[8,9]],[[1,2,3],None]] 


value = None 
empty =[] 
for i in range(len(new_pop)): 
    if value in new_pop[i] and [] in new_pop[i]: 
     new_pop.remove(new_pop[i]) 

print(new_pop) 

我希望結果是

new_pop=[[[0,1,2,3],[4,5,6]]] 
+0

我的代碼並沒有給我想要的結果。請幫忙!非常感謝! – user02

+1

對於'[8,9]'和'[1,2,3]',它們既不是'None'也不是'[]' – AChampion

+0

哦,我明白了。我應該如何解決它? – user02

回答

1
new_pop = [sub for sub in new_pop if not (None in sub or [] in sub)] 

你的代碼中有兩個錯誤:

  1. 您使用andsub = [[],[8,9]]滿足None in sub而不是None in sub and [] in sub,因爲它不滿足[] in sub。你需要or

  2. 您在迭代時正在從列表中刪除項目。永遠不要這樣做。總是創建一個新的列表,就像我在這裏所做的一樣。

+0

非常感謝! – user02

1

如果你正在嘗試做的是去除包括None[]然後假設在你的子表的所有項目都list s的內容,那麼你可以使用的all()保護任何子表:

>>> [x for x in new_pop if all(x)] 
[[[0, 1, 2, 3], [4, 5, 6]]] 
+0

聰明,但有風險。它看起來不像這裏,但也許列表可以包含其他虛假的東西。 –

+0

同意,但假設子列表包含不含有內容的'list's,那麼它應該執行所需的內容。 – AChampion

+0

非常感謝你!!!!! – user02