基于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)