python - 如何从多个不同类型的字符串列表中获取所需的值
问题描述
我正在构建一个计算 PT 可访问性的工具。我只需要更多的数据来开始量化过程,但一直在为下面的这个问题而苦苦挣扎。
我有这个脚本,它可以从 HERE API 获取公共交通旅行的断腿数据,这是代码的示例结果:
a = [' Walk 158m - 160s', ' Walk 267m - 267s', ' bus-246 ', ' bus-302 ', ' NA ', 'GTFS time > HERE API time', ' Walk 556m - 566s', 'train-Lilydale', ' Walk 52m - 52s', 'rail-109', ' Walk 0m - 0s']
我只想获取“m”和“s”前面的数字列表,以计算一次旅行的总步行时间和距离,我只能摆脱“m”、“s”和“NA”调整脚本和结果如下所示:
a = ['158 - 160', ' 267 - 267', ' bus-246 ', ' bus-302 ', 'GTFS time > HERE API time', ' 556 - 566', 'train-Lilydale', ' 52 - 52', 'rail-109', ' 0 - 0']
但即使我能得到我想要的(我做不到),调整现有脚本也有点难看。
关键是如何以这种形式获得输出:
Distance = [158, 267, 556, 52, 0]
Time = [160, 267, 556, 52, 0]
那么我可以计算它们的总和吗?
解决方案
你可以使用一个非常简单的正则表达式:
import re
a = [' Walk 158m - 160s', ' Walk 267m - 267s', ' bus-246 ', ' bus-302 ', ' NA ', 'GTFS time > HERE API time', ' Walk 556m - 566s', 'train-Lilydale', ' Walk 52m - 52s', 'rail-109', ' Walk 0m - 0s']
def number_values(e):
out = e
numbers = re.findall(r'\d+', e)
if len(numbers) == 2:
out = '{0} - {1}'.format(*numbers)
return out
[number_values(v) for v in a if v != ' NA ']
['158 - 160',
'267 - 267',
' bus-246 ',
' bus-302 ',
'GTFS time > HERE API time',
'556 - 566',
'train-Lilydale',
'52 - 52',
'rail-109',
'0 - 0']
推荐阅读
- pandas - 将两个熊猫系列与一个条件进行比较,如果条件匹配则分配 False 否则保留第一个系列的值
- ios - 旧版构建系统和新版构建系统之间的区别
- javascript - 如何根据 React 中的值是增加还是减少来运行效果?
- ios - 从 XCode 13 beta 5 降级时 XCode 12 错误 Abort trap:6
- javascript - 以角度读取 Observable 数组数据
- javascript - 基于第三个对象,将属性从对象“移动”到新对象中
- java - 如何模拟 Zip 文件的 HTTP 响应 - 获取 java.io.EOFException
- java - 如何在android studio中组合2个java代码
- buddypress - 获取 Buddypress 组并在目录中显示完整描述
- .net-core - .NetCore IOptions 使用构造函数配置对象