2017-04-23 3 views
0

リストの空リストとNoneTypeリストを削除したいと思います。これは一例です。Python-リストの理解。 Listのリストから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) 

私の願望の結果は、あなたのコードは、2つのエラーがある

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. あなたはandを使用します。 sub = [[],[8,9]]は、[] in subを満足しないため、None in subを満足するが、None in sub and [] in subを満足しない。 orが必要です。

  2. リストを繰り返し処理するときにリストから項目を削除しています。絶対にしないでください。私がここでやったように、常に新しいリストを作成してください。

+0

ありがとう! – user02

1

あなたがやろうとしているすべてはあなたのサブリストのすべての項目を内容とlist秒、あなたはall()のガードを使用することができていることを想定し、その後None[]を含む任意のサブリスト削除の場合:

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

賢いですが、危険です。それはここのようには見えませんが、リストには他の偽のものが入っているかもしれません。 –

+0

合意しましたが、サブリストに内容が偽ではない 'list'sが含まれていると仮定すると、必要な処理を行う必要があります。 – AChampion

+0

ありがとうございます!!!!! – user02

関連する問題