1

通常,要检测字符串字段,我可以检查第一个字符是否为字符串。例如:

>>> [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]

有没有更好的方法来做到这一点?

4

1 回答 1

1

一种有效的方法是float()在块中使用构造函数,try-except因为它使用 C 中实现的内置测试。','如果您想忽略千位分隔符,请删除出现的 first :

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]
于 2018-12-20T20:37:34.030 回答