2016-05-19 3 views
0

私は多少Pythonには新しく、最初のリストのような文字列のリストを扱っていて、2番目のリストに示されている真理値だけにフィルターをかけて探しています。真理によるPythonフィルタリングリスト

l = ['value1', 'value2', '', None, 'value3'] 
l = ['value1', 'value2', 'value3'] 

私は以前それを

new_l = filter(lambda x: x, l) 
new_l = filter(bool, l) 

を(最近で秒)以下の方法をやってきたこのソリューションへのより多くの神託のアプローチはありますか?

答えて

5

最初の引数がNoneの場合、filterはブール値のコンテキストでFalseに評価されるすべての要素を自動的に削除します。私はほとんどのニシキヘビのアプローチと考えているでしょう:Pythonのドキュメントから

>>> filter(None, [1, 3, 0, 5, 3]) 
[1, 3, 5, 3] 

抜粋:

は、関数がtrueを返すのiterableのこれらの要素からリストを構築します。 iterableは、シーケンス、反復をサポートするコンテナ、またはイテレータのいずれかです。 iterableが文字列またはタプルの場合、結果もその型を持ちます。それ以外の場合は常にリストになります。 functionがNoneの場合、アイデンティティ関数が仮定されます。つまり、falseであるiterableのすべての要素が削除されます。

代替オプションは、それらを使用することの利点は、彼らは関係なく、あなたは、Python 3にiteratorを返しfilterとは異なり、使用しているPythonのバージョンと同じように動作しないことになりますのPython 3でPython 2上のリストの内包とジェネレータ式になりリストの代わりに

>>> l = [1, 3, 0, 5, 3] 
>>> [x for x in l if x] 
[1, 3, 5, 3] 
>>> list(x for x in l if x) 
[1, 3, 5, 3] 
+0

これはちょうど私が探していたものです。ありがとう –

関連する問題