ブール値のリストの値を指定してフィルタリングする必要がある値のリストがあります。
list_a = [1, 2, 4, 6]
filter = [True, False, True, False]
次の行を使用して、新しいフィルター済みリストを生成します。
filtered_list = [i for indx,i in enumerate(list_a) if filter[indx] == True]
その結果:
print filtered_list
[1,4]
ラインは機能しますが、(私にとって)少しやり過ぎに見え、同じことを達成するためのより簡単な方法があるかどうか疑問に思っていました。
アドバイス
以下の回答で与えられる2つの良いアドバイスの要約:
1- filter組み込み関数であるため、リストに名前を付けないでください。
2- それは不必要なので、True私がしたように物事を比較しないでくださいif filter[idx]==True..。使うif filter[idx]だけで十分です。
if filter[indx] == TrueDOはない使用==あなたが身元をチェックしたい場合にTrue使用is。とにかく、この場合、比較全体が役に立たないので、単にを使用できますif filter[indx]。最後に、組み込みの名前を変数/モジュール名として使用しないでください(私は名前を参照していますfilter)。のようなものを使用しincludedて、if読み取りがうまくいくようにします(if included[indx])。