You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 04:27:16