首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检查字符串是否可以在Python中转换为浮点型

检查字符串是否可以在Python中转换为浮点型
EN

Stack Overflow用户
提问于 2009-04-10 05:52:33
回答 15查看 393.8K关注 0票数 244

我有一些Python代码,它遍历字符串列表,并在可能的情况下将它们转换为整数或浮点数。对整数执行此操作非常简单

代码语言:javascript
复制
if element.isdigit():
  newelement = int(element)

浮点数的难度更大。现在,我使用partition('.')来拆分字符串,并检查以确保其中一端或两端都是数字。

代码语言:javascript
复制
partition = element.partition('.')
if (partition[0].isdigit() and partition[1] == '.' and partition[2].isdigit()) 
    or (partition[0] == '' and partition[1] == '.' and partition[2].isdigit()) 
    or (partition[0].isdigit() and partition[1] == '.' and partition[2] == ''):
  newelement = float(element)

这是可行的,但显然if语句有点不靠谱。我考虑的另一个解决方案是将转换包装在try/catch块中,并查看它是否成功,如this question中所述。

还有没有别的主意?对分区和try/catch方法的相对优点有什么看法?

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2009-04-09 21:55:39

我只会用..。

代码语言:javascript
复制
try:
    float(element)
except ValueError:
    print "Not a float"

..这很简单,而且很管用。请注意,如果元素是1<<1024,它仍然会抛出OverflowError。

另一种选择是正则表达式:

代码语言:javascript
复制
import re
if re.match(r'^-?\d+(?:\.\d+)$', element) is None:
    print "Not float"
票数 381
EN

Stack Overflow用户

发布于 2014-01-05 11:56:53

用于检查浮动的Python方法:

代码语言:javascript
复制
def is_float(element: Any) -> bool:
    try:
        float(element)
        return True
    except ValueError:
        return False

始终进行单元测试。什么是浮点,什么不是浮点可能会让你大吃一惊:

代码语言:javascript
复制
Command to parse                        Is it a float?  Comment
--------------------------------------  --------------- ------------
print(isfloat(""))                      False
print(isfloat("1234567"))               True 
print(isfloat("NaN"))                   True            nan is also float
print(isfloat("NaNananana BATMAN"))     False
print(isfloat("123.456"))               True
print(isfloat("123.E4"))                True
print(isfloat(".1"))                    True
print(isfloat("1,234"))                 False
print(isfloat("NULL"))                  False           case insensitive
print(isfloat(",1"))                    False           
print(isfloat("123.EE4"))               False           
print(isfloat("6.523537535629999e-07")) True
print(isfloat("6e777777"))              True            This is same as Inf
print(isfloat("-iNF"))                  True
print(isfloat("1.797693e+308"))         True
print(isfloat("infinity"))              True
print(isfloat("infinity and BEYOND"))   False
print(isfloat("12.34.56"))              False           Two dots not allowed.
print(isfloat("#56"))                   False
print(isfloat("56%"))                   False
print(isfloat("0E0"))                   True
print(isfloat("x86E0"))                 False
print(isfloat("86-5"))                  False
print(isfloat("True"))                  False           Boolean is not a float.   
print(isfloat(True))                    True            Boolean is a float
print(isfloat("+1e1^5"))                False
print(isfloat("+1e1"))                  True
print(isfloat("+1e1.3"))                False
print(isfloat("+1.3P1"))                False
print(isfloat("-+1"))                   False
print(isfloat("(1)"))                   False           brackets not interpreted
票数 251
EN

Stack Overflow用户

发布于 2016-07-12 20:52:46

代码语言:javascript
复制
'1.43'.replace('.','',1).isdigit()

仅当存在或不存在‘’时才返回true。在数字字符串中。

代码语言:javascript
复制
'1.4.3'.replace('.','',1).isdigit()

将返回false

代码语言:javascript
复制
'1.ww'.replace('.','',1).isdigit()

将返回false

票数 44
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/736043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档