如何在Python列表中排除“False”等于0

时间:2017-08-23 12:01:39

标签: python list

我正在尝试创建一个列表,该列表是输入列表的副本减去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]

问题是在输入列表中存在一个“False”值,该值不被认为不同于0,因此它不会出现在输出中。如何修改代码以使“False”包含在输出中?

2 个答案:

答案 0 :(得分:2)

您可以为i is False添加额外支票:

[i for i in input if i != 0 or i is False]

您还没有说出如何处理其他等于零的数字,例如float 0.0Decimal('0')。此答案假定您要排除它们。

答案 1 :(得分:1)

False0非常相似,因为boolint的子类型。您可以过滤掉仅0完全 int的值,但是:

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

这当然会保留非整数的内容,例如0.0Decimal(0)等。

在Python 2中,它需要是or type(i) not in (int, long),但不要使用Python 2.