首页 > 解决方案 > 基于Python中的zip函数从列表中的字符串文字中提取数字

问题描述

我有一个字符串列表,以分钟和秒为单位表示时间,例如

distanceList = [0.56, 0.04, 0.56, 0.44, 0.76] #represents distances traveled
timeList = ['5m:11s', '18m:18s', '13m:35s', '8m:26s', '121m:7s'] # represents time to taken to travel

我需要提取这些数字(分钟(m)和秒(s))并转换为小时。

到目前为止,我已经实现了 zip 函数并使用了一些列表理解将数字单独提取到列表中。但是,考虑到它们是分开的并且与冒号分隔符的距离并不总是一致的,我不确定如何将它们汇总为数小时。我就是这么走的。

for a, b in zip(distanceList, timeList):
nums = [item for subitem in b for item in subitem.split() if item.isdigit()]
print nums

预期结果:表示分钟和秒的整数列表。

[[5,11],[18,18]...]

收到的结果:

['5', '1', '1', '1', '8', '8'....]

标签: pythonloopssplittype-conversion

解决方案


如果“汇总为小时”仍然相关:求和timedelta对象。

from datetime import timedelta

strings =  ['5m:11s', '18m:18s', '13m:35s', '8m:26s', '121m:7s']

def sum_timestrings(strings):
    min_secs = (s.split(':') for s in strings)
    total = sum((timedelta(minutes=int(m[:-1]), seconds=int(s[:-1]))
                for m, s in min_secs), timedelta())
    return total

total = sum_timestrings(strings)
print(total) # 2:46:37 
print(total.total_seconds()/3600) # 2.7769444444444447 

推荐阅读