如何统计Python列表中指定类型元素的出现次数?
问题原因
list.count()的作用是统计列表中与传入参数值完全相等的元素数量,你传入int时,只会匹配列表中值就是int类对象本身的元素,和你预期的「判断元素类型是否符合要求」的逻辑不符。另外你写的type(str)其实返回的是type类本身,也不是你要匹配的str类型,直接传str作为目标类型即可,所以原写法返回结果都为0。
解决方法
用Python内置的sum()配合生成器表达式即可一行实现需求,写法非常简洁:
ex_list = ["string", "data", "item", 1, 3, {3: "im dict"}, "im_item"] # 统计严格int类型的元素(不包含子类,比如bool不算int) int_count = sum(type(item) is int for item in ex_list) print(int_count) # 输出 2 # 统计严格str类型的元素 str_count = sum(type(item) is str for item in ex_list) print(str_count) # 输出 4
如果需要兼容继承关系(比如认为bool类型属于int的子类,需要被统计到int的数量里),可以把type(item) is xxx替换为isinstance(item, xxx):
test_list = [1, 2, True, False] # 兼容继承的统计 int_count = sum(isinstance(item, int) for item in test_list) print(int_count) # 输出 4
如果需要复用这个逻辑,可以封装成自定义工具函数,调用起来和内置的count一样方便:
def count_by_type(lst: list, target_type: type, strict: bool = True) -> int: if strict: return sum(type(item) is target_type for item in lst) return sum(isinstance(item, target_type) for item in lst) # 调用示例 print(count_by_type(ex_list, int)) # 2 print(count_by_type(ex_list, str)) # 4
内容的提问来源于stack exchange,提问作者MathiasCodes
相关产品推荐
相关产品推荐

