如何计算列表中“None”的出现次数?
How to count the number of occurrences of `None` in a list?
我正在尝试计算不是 None
的东西,但我也希望接受 False
和数字零。反向逻辑:我想计算除明确声明为 None
.
之外的所有内容
例子
只是第 5 个元素未包含在计数中:
>>> list = ['hey', 'what', 0, False, None, 14]
>>> print(magic_count(list))
5
我知道这不是 Python 的正常行为,但我怎样才能覆盖 Python 的行为?
我试过的
到目前为止,我发现人们建议a if a is not None else "too bad"
,但它不起作用。
我也试过 isinstance
,但没有成功。
只需使用 sum
检查每个对象 is not None
将是 True
或 False
所以 1 或 0.
lst = ['hey','what',0,False,None,14]
print(sum(x is not None for x in lst))
或使用 filter
和 python2:
print(len(filter(lambda x: x is not None, lst))) # py3 -> tuple(filter(lambda x: x is not None, lst))
使用 python3 有 None.__ne__()
将只忽略 None 和过滤器而不需要 lambda。
sum(1 for _ in filter(None.__ne__, lst))
sum
的优点是它一次懒惰地评估一个元素,而不是创建一个完整的值列表。
注意避免使用 list
作为变量名,因为它会遮盖 python list
.
lst = ['hey','what',0,False,None,14]
print sum(1 for i in lst if i != None)
两种方式:
一个,用列表表达式
len([x for x in lst if x is not None])
二,统计Nones,从长度中减去:
len(lst) - lst.count(None)
我最近发布了一个包含函数 iteration_utilities.count_items
(ok, actually 3 because I also use the helpers is_None
and is_not_None
) 的库:
>>> from iteration_utilities import count_items, is_not_None, is_None
>>> lst = ['hey', 'what', 0, False, None, 14]
>>> count_items(lst, pred=is_not_None) # number of items that are not None
5
>>> count_items(lst, pred=is_None) # number of items that are None
1
使用 numpy
import numpy as np
list = np.array(['hey', 'what', 0, False, None, 14])
print(sum(list != None))
您可以使用 collections
中的 Counter
。
from collections import Counter
my_list = ['foo', 'bar', 'foo', None, None]
resulted_counter = Counter(my_list) # {'foo': 2, 'bar': 1, None: 2}
resulted_counter[None] # 2
我需要确保每次调用只发送一个参数。因此至少有 2 个变量必须是 None,这对我有用。
a_list = [param_1, param_2, param_3]
count = a_list.count(None)
if count < 2:
raise error
我正在尝试计算不是 None
的东西,但我也希望接受 False
和数字零。反向逻辑:我想计算除明确声明为 None
.
例子
只是第 5 个元素未包含在计数中:
>>> list = ['hey', 'what', 0, False, None, 14]
>>> print(magic_count(list))
5
我知道这不是 Python 的正常行为,但我怎样才能覆盖 Python 的行为?
我试过的
到目前为止,我发现人们建议a if a is not None else "too bad"
,但它不起作用。
我也试过 isinstance
,但没有成功。
只需使用 sum
检查每个对象 is not None
将是 True
或 False
所以 1 或 0.
lst = ['hey','what',0,False,None,14]
print(sum(x is not None for x in lst))
或使用 filter
和 python2:
print(len(filter(lambda x: x is not None, lst))) # py3 -> tuple(filter(lambda x: x is not None, lst))
使用 python3 有 None.__ne__()
将只忽略 None 和过滤器而不需要 lambda。
sum(1 for _ in filter(None.__ne__, lst))
sum
的优点是它一次懒惰地评估一个元素,而不是创建一个完整的值列表。
注意避免使用 list
作为变量名,因为它会遮盖 python list
.
lst = ['hey','what',0,False,None,14]
print sum(1 for i in lst if i != None)
两种方式:
一个,用列表表达式
len([x for x in lst if x is not None])
二,统计Nones,从长度中减去:
len(lst) - lst.count(None)
我最近发布了一个包含函数 iteration_utilities.count_items
(ok, actually 3 because I also use the helpers is_None
and is_not_None
) 的库:
>>> from iteration_utilities import count_items, is_not_None, is_None
>>> lst = ['hey', 'what', 0, False, None, 14]
>>> count_items(lst, pred=is_not_None) # number of items that are not None
5
>>> count_items(lst, pred=is_None) # number of items that are None
1
使用 numpy
import numpy as np
list = np.array(['hey', 'what', 0, False, None, 14])
print(sum(list != None))
您可以使用 collections
中的 Counter
。
from collections import Counter
my_list = ['foo', 'bar', 'foo', None, None]
resulted_counter = Counter(my_list) # {'foo': 2, 'bar': 1, None: 2}
resulted_counter[None] # 2
我需要确保每次调用只发送一个参数。因此至少有 2 个变量必须是 None,这对我有用。
a_list = [param_1, param_2, param_3]
count = a_list.count(None)
if count < 2:
raise error