我只想0
从清单中删除:
>>> mylist = [0, 1, None, 2, False, 1, 0]
他们都缺少假物品
>>> list(filter(lambda x: x != 0, mylist))
[1, None, 2, 1] # missing False
>>> list(filter(lambda x: x != 0 and x is not type(int), mylist))
[1, None, 2, 1] # missing False
>>> list(filter(lambda x: x != 0 and x is not type(False), mylist))
[1, None, 2, 1]
>>> list(filter(lambda x: x != 0 and x is not False, mylist))
[1, None, 2, 1]
所需的输出:
[1, None, 2, False, 1]
谢谢您的帮助。
Pythonbool
是0的子类,int
并且False
类似于0。因此,按相等进行比较不会产生所需的输出。
您可以使用(请注意,这是最不推荐的选择,理想情况下您不应使用):
>>> list(filter(lambda x: x is not 0, mylist))
[1, None, 2, False, 1]
您应该使用什么:
正如评论中所讨论的,身份检查可能无法在所有情况下进行。一种更可行的方法是将相等检查与类型检查一起使用为:
>>> list(filter(lambda x: x != 0 or isinstance(x, bool), mylist))
[1, None, 2, False, 1]
就个人而言,不是filter
and的粉丝lambda
,我将使用列表理解,这将证明速度更快:
>>> [x for x in mylist if x != 0 or isinstance(x, bool)]
[1, None, 2, False, 1]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句