如何检测列表中的非数字? [复制]

Posted

技术标签:

【中文标题】如何检测列表中的非数字? [复制]【英文标题】:How to detect non-number of the list? [duplicate] 【发布时间】:2016-01-06 20:34:57 【问题描述】:

假设我有一个如下列表:

a = ['111', 213, 74, '99', 't', '88', '-74', -74]

该列表包含类数字字符串、数字和字符串的数据类型。

我认为类似数字的字符串可以转换数字,所以它可以看作是一个数字。

这是我的方法:

a = ['111', 213, 74, '99', 't', '88', '-74', -74]

def detect(list_):
    for element in list_:
        try:
            int(element)
        except ValueError:
            return False
    return True

print detect(a)

但它看起来如此冗长且难以阅读,所以有人有更好的方法来检测它吗?

另外,我的列表中包含负数和类似负数的字符串,我该怎么办?

【问题讨论】:

它有点长,但绝对不是不可读的。但是您应该将 except: 替换为 except ValueError: 并提升 try-except 以包装 forloop 而不是单个元素 虽然注释异常让其更具可读性,但希望可以简化为一行代码。 【参考方案1】:

仅适用于正整数:

not all(str(s).isdigit() for s in a)

对于否定:

not all(str(s).strip('-').isdigit() for s in a)

对于小数和负数:

not all(str(s).strip('-').replace('.','').isdigit() for s in a)

【讨论】:

这将在整数和负数字符串上失败【参考方案2】:
a = ['111', 213, 74, '99', 't', '88']

def detect(list_):
    try:
        map(int,list_)
        return True
    except ValueError:
        return False

print detect(a)

【讨论】:

这不是一个好主意。它只是将for 替换为map【参考方案3】:
a = ['111', 213, 74, '99', 't', '88']

print([x for x in a if not str(x).isdigit()])

['t']

【讨论】:

以上是关于如何检测列表中的非数字? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件中的一行数字读入列表中? [复制]

如何将字符串中的所有数字映射到 Python 中的列表? [复制]

如何检测字符串中的非 ASCII 字符?

去掉字符串中的非数字字符

如何检测正则表达式中的下划线? [复制]

如何将文件读入 Python 中的列表? [复制]