我正在尝试创建一个列表,该列表是输入列表的副本减去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”包含在输出中?
答案 0 :(得分:2)
您可以为i is False
添加额外支票:
[i for i in input if i != 0 or i is False]
您还没有说出如何处理其他等于零的数字,例如float 0.0
或Decimal('0')
。此答案假定您要排除它们。
答案 1 :(得分:1)
False
与0
非常相似,因为bool
是int
的子类型。您可以过滤掉仅0
和完全 int
的值,但是:
[i for i in input if i != 0 or type(i) != int]
这当然会保留非整数的内容,例如0.0
,Decimal(0)
等。
在Python 2中,它需要是or type(i) not in (int, long)
,但不要使用Python 2.