通常,要检测一个字符串字段,我可以检查一下第一个字符是否为字符串。例如:
>>> [str(v)[0].isalpha() for v in ['first', 'last']]
[True, True]
但是,有时候我会拥有数据库或其他字符串字段,但是以数字开头,例如“ 3D”是我遇到的一个字段。
检查列表中的所有项目是否都是字符串的最有效方法是什么?
以下是一些示例:
['1.0', 'test', '3d', '123,000.00', '55']
> False, True, True, False, False
基本上,我想知道一个值是否可以存储为varchar字段或需要转换为非字符串字段。
那会是这样的:
values = ['1.0', 'test', '3d', '123,000.00', 55]
>>> [not re.sub(r'\,|\.', '', str(val)).isdigit() for val in values]
[False, True, True, False, False]
还有更好的方法吗?
答案 0 :(得分:1)
一种有效的方法是在float()
块中使用try-except
构造函数,因为它使用C语言中实现的内置测试。如果要删除','
,请首先删除忽略数千个分隔符:
def not_number(string):
try:
float(string.replace(',', ''))
except ValueError:
return True
return False
这样:
values = ['1.0', 'test', '3d', '123,000.00', '55']
[not_number(value) for value in values]
返回:
[False, True, True, False, False]