如何筛选Python列表中的数值元素?解决isnumeric方法报错问题
解决Python列表提取数值元素时的AttributeError问题
错误原因
isnumeric() 和 isdigit() 是字符串专属方法,仅能用于str类型对象。你列表里的7、18、3是int类型,直接调用这些方法必然触发AttributeError: 'int' object has no attribute 'isnumeric'。另外要注意:Python中bool是int的子类(True等价于1,False等价于0),如果只简单判断int类型会误把True也当成数值元素,需要额外排除。
解决方案
以下是几种可靠的提取方式:
方法1:严格匹配int类型(排除bool)
利用type()严格判断类型,因为True的类型是bool而非int,可以直接过滤:
lst = [7, 18, 3, 'a', True, (2,3)] numeric_elements = [x for x in lst if type(x) is int] print(numeric_elements) # 输出: [7, 18, 3]
方法2:用isinstance并排除bool
如果需要兼容未来可能加入的float类型,这种方式更灵活:
lst = [7, 18, 3, 'a', True, (2,3)] numeric_elements = [x for x in lst if isinstance(x, int) and not isinstance(x, bool)] print(numeric_elements) # 输出: [7, 18, 3]
如果要包含float,只需把判断条件改成isinstance(x, (int, float)) and not isinstance(x, bool)。
方法3:针对含字符串数字的场景(扩展)
如果你的列表里同时有数值类型和字符串形式的数字(比如'7'),可以结合类型判断和字符串方法:
lst = [7, '18', 3, 'a', True, (2,3)] numeric_elements = [] for x in lst: if isinstance(x, int) and not isinstance(x, bool): numeric_elements.append(x) elif isinstance(x, str) and x.isdigit(): numeric_elements.append(int(x)) print(numeric_elements) # 输出: [7, 18, 3]
内容的提问来源于stack exchange,提问作者Petar Barac
相关产品推荐
相关产品推荐

