我只想0从清单中删除:
>>> mylist = [0, 1, None, 2, False, 1, 0]
Run Code Online (Sandbox Code Playgroud)
他们都缺少假物品
>>> 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]
Run Code Online (Sandbox Code Playgroud)
所需的输出:
[1, None, 2, False, 1]
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助。
Python bool是0的子类,int并且False类似于0。因此,按相等进行比较不会产生所需的输出。
您可以使用(请注意,这是最不推荐使用的,理想情况下您不应使用):
>>> list(filter(lambda x: x is not 0, mylist))
[1, None, 2, False, 1]
Run Code Online (Sandbox Code Playgroud)
您应该使用什么:
正如评论中所讨论的,身份检查可能无法在所有情况下进行。一种更可行的方法是将相等检查与类型检查一起使用为:
>>> list(filter(lambda x: x != 0 or isinstance(x, bool), mylist))
[1, None, 2, False, 1]
Run Code Online (Sandbox Code Playgroud)
就个人而言,不是filterand 的忠实拥护者lambda,我会使用列表综合,它证明了更快:
>>> [x for x in mylist if x != 0 or isinstance(x, bool)]
[1, None, 2, False, 1]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |