如何计算列表中"无"的出现次数?

Hra*_*bal 18 python boolean list-comprehension nonetype

我试图计算那些不是的东西None,但是我想要False和数字零也被接受.反转逻辑:除了明确声明的内容外,我想计算所有内容None.

只是第5个元素,它不包含在计数中:

>>> list = ['hey', 'what', 0, False, None, 14]
>>> print(magic_count(list))
5
Run Code Online (Sandbox Code Playgroud)

我知道这不是Python的正常行为,但我怎样才能覆盖Python的行为?

我试过的

到目前为止,我建立的人建议a if a is not None else "too bad",但它不起作用.

我也试过了isinstance,但没有运气.

Pad*_*ham 35

只是使用sum检查是否每个对象is not None,这将是TrueFalse所以1或0.

lst = ['hey','what',0,False,None,14]
print(sum(x is not None for x in lst))
Run Code Online (Sandbox Code Playgroud)

或者使用filterpython2:

print(len(filter(lambda x: x is not None, lst))) # py3 -> tuple(filter(lambda x: x is not None, lst))
Run Code Online (Sandbox Code Playgroud)

使用python3 None.__ne__()只会忽略None和过滤而不需要lambda.

sum(1 for _ in filter(None.__ne__, lst))
Run Code Online (Sandbox Code Playgroud)

优点sum是它一次懒惰地评估一个元素,而不是创建一个完整的值列表.

另外,请注意避免使用list变量名称,因为它会影响python list.


Rem*_*ich 10

两种方式:

一,带有列表表达式

len([x for x in lst if x is not None])
Run Code Online (Sandbox Code Playgroud)

二,计算Nones并从长度中减去它们:

len(lst) - lst.count(None)
Run Code Online (Sandbox Code Playgroud)