Python字符串转数字有没有更好的方法,python字符串,python自带的int


python自带的int函数在值中出现字符串的情况下会出现错误

python>>> int('232d')Traceback (most recent call last):  File "<stdin>", line 1, in <module>ValueError: invalid literal for int() with base 10: '232d'

而js中parseInt则不会出现类似问题

javascriptvar num = parseInt('2323d')num == 2323

那么,如何用python实现一个类似js的parseInt函数(尽量不用正则)

下面是我实现的一个,但是有没有更好的方法

pythondef safe_int(num):    try:        return int(num)    except ValueError:        result = []        for c in num:            if not ('0' <= c <= '9'):                break            result.append(c)        if len(result) == 0:            return 0        return int(''.join(result))

借用itertools宝藏的话,核心代码一句话
takewhile 返回头部符合条件的元素的迭代器。

from itertools import takewhiledef parseInt(s):    assert isinstance(s, basestring)    return int(''.join(list(takewhile(lambda x:x.isdigit(),s)))) if s[0].isdigit() else None
python    from functools import reduce    def parseInt(s):        return reduce(lambda x, y: x*10+y, map(int, filter(lambda c : c>='0' and c<='9', s)))

针对

这一情况,再看了下原问题,其实原问题关键之处即在于剥离出这样一个简单问题“查找到字符串中第一个不为数字的字符的位置”。

python    def find(s):        for i in range(len(s)):            if not '0'<=s[i]<='9':                return i        return len(s)

找到这个位置后,然后用切片函数和int方法就可以完成任务了。

python    s = '234jdsf23232ks'    idx = find(s)    int(s[0:idx])

思路跟题主的差不多^-^

这样行吗def safe_int(num):    assert isinstance(num, basestring)    try:        return int(num)    except ValueError:        result = "0"        for c in num:            if c not in string.digits:                break            result += c        return int(result)

编橙之家文章,

评论关闭