如何检测列表中的非数字? [复制]
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
以包装 for
loop 而不是单个元素
虽然注释异常让其更具可读性,但希望可以简化为一行代码。
【参考方案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']
【讨论】:
以上是关于如何检测列表中的非数字? [复制]的主要内容,如果未能解决你的问题,请参考以下文章