如何检查Python列表指定元素是否为数字?解决属性报错问题
如何判断列表元素是否为数字(含数字类型或字符串型数字)并筛选对应索引元素?
问题场景
现有两个列表:
list1 = [1, 2, 'A', 'B', 3, '4'] list2 = [1, 2, 3, 4, 5, 6]
需求:提取list2中,与list1同索引位置为**数字(包括int类型或字符串形式的正整数)**的元素,预期输出:[1,2,5,6]
尝试代码与错误
尝试用isdigit()判断元素是否为数字,代码如下:
length1 = len(list1) for i in range(length1): if (list1[i].isdigit()): print(list2[i])
触发错误:
AttributeError: 'int' object has no attribute 'isdigit'
使用isnumber()也会出现相同错误。
错误原因
isdigit()是字符串专属方法,仅能被str类型对象调用。而list1中包含int类型元素(如1、2、3),直接调用该方法会触发属性不存在的错误。
解决方案
方法1:尝试转换法(推荐,兼容性最强)
通过尝试将元素转换为数字的方式判断,能覆盖int、float、字符串形式的整数/小数、负数字符串等场景:
result = [] for item1, item2 in zip(list1, list2): try: # 尝试转换为浮点数,兼容整数、小数及对应字符串 float(item1) result.append(item2) except ValueError: # 转换失败,说明不是数字,跳过 continue print(result) # 输出: [1, 2, 5, 6]
方法2:类型判断+字符串校验结合
适合仅需判断正整数的场景,先判断元素是否为数字类型,再对字符串做数字校验:
result = [] for i in range(len(list1)): elem = list1[i] # 先判断是否为int/float类型 if isinstance(elem, (int, float)): result.append(list2[i]) # 再判断是否为字符串且是正整数 elif isinstance(elem, str) and elem.isdigit(): result.append(list2[i]) print(result) # 输出: [1, 2, 5, 6]
注:若需支持负数字符串(如'-4'),可将
elem.isdigit()改为elem.lstrip('-').isdigit()
方法3:列表推导式简化写法
基于尝试转换法封装后,用列表推导式简化代码:
def is_number(x): try: float(x) return True except (ValueError, TypeError): return False result = [item2 for item1, item2 in zip(list1, list2) if is_number(item1)] print(result) # 输出: [1, 2, 5, 6]
内容的提问来源于stack exchange,提问作者Stephan Gheorghica
相关产品推荐
相关产品推荐

