如何从列表中仅筛选整数,排除布尔值?
解决Python列表筛选整数时排除True/False的问题
问题根源在于Python的类型继承关系:bool是int的子类,所以isinstance(True, int)和isinstance(False, int)都会返回True,导致你的列表推导式把布尔值误判为整数保留了。
这里提供两种实用的解决方法:
方法一:严格匹配类型
直接用type()判断元素类型是否严格等于int,因为type(True)返回的是bool而非int,能精准筛选出纯整数:
original_list = [True, 19, 19.5, False] filtered_list = [i for i in original_list if type(i) is int] # 输出结果: [19]
方法二:添加布尔类型排除条件
在原有isinstance判断的基础上,额外排除布尔类型,这种方式更灵活,适用于需要保留int其他子类但仅排除bool的场景:
original_list = [True, 19, 19.5, False] filtered_list = [i for i in original_list if isinstance(i, int) and not isinstance(i, bool)] # 输出结果: [19]
另外注意:不要用list作为变量名,这会覆盖Python的内置list类型,容易引发潜在问题。
内容的提问来源于stack exchange,提问作者C Sicily
相关产品推荐
相关产品推荐

