Python字符串转数字有没有更好的方法,python字符串,python自带的int
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)
编橙之家文章,
相关内容
- python Burpsuite,Wireshark,Fiddler 抓包的适用场景,以及优
- Python Django生成admin页中禁止模块部分功能如何实现,
- python sort()中cmp参数有什么要求,pythoncmp,最近在看<
- 需要提交JS表单,用python脚本能完成这项工作吗,jspyth
- 想用python splinter框架控制跳转页内容如何写,pythonspl
- mac系统不关闭终端如何停止python程序,mac终端停止pyt
- python更新文件mime_type相关提问,,之前上传 mp3 音频的
- 需要Python编写的服务器案例,python编写案例,我想实现一
- python加减混合循环计算想不出思路1-2+3-4+5 ...,python3-
- Python爬虫提取目标信息方法是?,python爬虫,最近在学写
评论关闭