python - 在python中将诸如data0000172之类的数字重新格式化为172
问题描述
我有一个字符串列表。data0*(\d*)
如果我们使用正则表达式形式,每个字符串都有形式。以下是字符串的示例:
data000000, data000003, data0172, data2312, data008212312
我只想取有意义的数字部分。所有数字都是整数。例如,在上述情况下,我想获得另一个列表,其中包含:
0, 3, 172, 2312, 8212312
在上述情况下,最好的方法是什么?
以下是我想到的解决方案:
import re
string_list = ["data0000172", ..... ]
number_list = []
for string in string_list:
match = re.search("data0*(\d+)", string)
if match:
number_list.append(match.group(1))
else:
raise Exception("Wrong format.")
但是,上述方法可能效率低下。你能建议一个更好的方法来做到这一点吗?
解决方案
如果您确定字符串以“数据”开头,您可以对字符串进行切片并转换为整数。前导零在那里不是问题。从零填充的数字字符串构建整数是可行的。
lst = ["data000000", "data000003", "data0172", "data2312", "data008212312"]
result = [int(x[4:]) for x in lst]
结果:
[0, 3, 172, 2312, 8212312]
或旧的替换以防万一前缀可以省略(但会稍微慢一些):
result = [int(x.replace("data","")) for x in lst]
推荐阅读
- javascript - 在 v-for 中绑定不同的事件监听器
- android - 更改 LiveData 时 DataBinding 不更新值
- selenium - Python selenium 将表值获取到列表列表中
- php - 创建 Laravel 项目
- javascript - commonjs和es6模块的去重
- python - 尝试更改熊猫列中的值时发出警报
- javascript - 关于如何将行分配给特定人员的 Excel 列表的 Java 脚本/Excel 公式
- django - 有没有办法让用户在 Django 网站上发帖之前先付款?
- javascript - 所有分片的 Discord.js 重新加载命令
- azure - 为“应使用即时网络访问控制保护虚拟机的管理端口”创建 Azure 自定义策略