基于Python中的zip函数从列表中的字符串文本中提取数字

基于Python中的zip函数从列表中的字符串文本中提取数字,python,loops,split,type-conversion,Python,Loops,Split,Type Conversion,我有一个以分和秒表示时间的字符串列表,例如 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函数,并使

我有一个以分和秒表示时间的字符串列表,例如

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'....]
或:

输出:

[[5, 11], [18, 18], [13, 35], [8, 26], [121, 7]]
下面

输出

0.56 --> ('5', '11')
0.04 --> ('18', '18')
0.56 --> ('13', '35')
0.44 --> ('8', '26')
0.76 --> ('121', '7')
如果“以小时求和”仍然相关:求和
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 
加5美分

times=['5m:11s','18m:18s','13m:35s','8m:26s','121m:7s']
f=lambda x:int(“”.join([i表示x中的i,如果i.isdigit()]))
新的_时间=[[f(s)表示在t.split中的u(“:”)表示在u.split中的s()]表示在t.split中的t]
输出

[[5,11]、[18,18]、[13,35]、[8,26]、[121,7]]

您可以使用列表理解:

timeList = ['5m:11s', '18m:18s', '13m:35s', '8m:26s', '121m:7s'] # represents time to taken to travel

times = [[int(minute), int(second)]
         for time in timeList
         for lst in [time.split(":")]
         for minute in ["".join([x for x in lst[0] if x.isdigit()])]
         for second in ["".join([y for y in lst[1] if y.isdigit()])]]

print(times)
产生

[[5, 11], [18, 18], [13, 35], [8, 26], [121, 7]]

海事组织一个更好的选择是:

import re
timeList = ['5m:11s', '18m:18s', '13m:35s', '8m:26s', '121m:7s'] # represents time to taken to travel

rx = re.compile(r'^(\d+)\D+(\d+)')
result = [m.groups() for item in timeList for m in [rx.search(item)]]
print(result)

有没有理由不使用regexp?我需要使用zip和os方法来提取这些数字。请发布完整的代码。什么是时间列表和距离列表?还有,如何将3分5秒转换成小时?道歉;更新。在将时间转换为小时的过程中,这是我正在努力解决的另一个方法:有一个十进制的小时数和秒数,我想是和?谢谢大家。我真的很感谢你们的帮助。我知道写得不好的问题让问题变得更难,但我非常感谢你选择回答这个问题。
timeList = ['5m:11s', '18m:18s', '13m:35s', '8m:26s', '121m:7s'] # represents time to taken to travel

times = [[int(minute), int(second)]
         for time in timeList
         for lst in [time.split(":")]
         for minute in ["".join([x for x in lst[0] if x.isdigit()])]
         for second in ["".join([y for y in lst[1] if y.isdigit()])]]

print(times)
[[5, 11], [18, 18], [13, 35], [8, 26], [121, 7]]
import re
timeList = ['5m:11s', '18m:18s', '13m:35s', '8m:26s', '121m:7s'] # represents time to taken to travel

rx = re.compile(r'^(\d+)\D+(\d+)')
result = [m.groups() for item in timeList for m in [rx.search(item)]]
print(result)