2017-08-23 6 views
0

入力リストのコピーから0を引いたリストを作成しようとしています。Pythonリストで "False"を0にすることを排除する方法

入力リスト:

input = ['a', 'b', None, 'c', 'd', 1, 1, 3, [], 1, 9, {}, 9, 0, 0, 0, False, 0, 0, 0, 0, 0, 0, 0] 

コード:

[i for i in input if i != 0] 

出力:

['a', 'b', None, 'c', 'd', 1, 1, 3, [], 1, 9, {}, 9] 

問題がでていることです入力リストには0以外の値と見なされない「False」値が存在するため、出力には表示されません。 "False"が出力に含まれるようにコードを変更するにはどうすればよいですか? boolintのサブタイプであるため、

答えて

1

Falseは、0と非常によく似ています。あなたは、両方のだけしかし0正確int、ある値を除外することができます。もちろん

[i for i in input if i != 0 or type(i) != int] 

これはPythonでは0.0のような整数ではありません事、Decimal(0)、など。

を保持します2は、それがor type(i) not in (int, long)をする必要がありますが、あなたがi is Falseのための余分なチェックを追加することができますPythonの2

+0

これには、OPが望むものではないかもしれない「0.0」が含まれます。 – Alasdair

+0

@ Alasdair:もう一度、それはOPが望むものかもしれません。 =) – Ryan

+1

あなたが正しいです、彼らが望むものかもしれません。 Python 2にはおそらくさらに混乱する '0L 'が含まれていました。 – Alasdair

2

を使用しないでください:

浮動小数点数0.0またはDecimal('0')のように、ゼロに等しい他の数値をどのように処理するかについては言及していません。この回答は、あなたがそれらを除外したいと仮定しています。

関連する問題