【发布时间】:2020-06-09 18:02:11
【问题描述】:
timeList = ['7m:13s', '11m:29s', '16m:48s', '3m:26s', '120m:0s']
如何从该列表中获取分钟和秒数?我希望能够创建一个公式来计算每小时英里数。
【问题讨论】:
-
你想从列表中得到什么最终结果,你只是想为元素
0说出713吗?
标签: python string list methods
timeList = ['7m:13s', '11m:29s', '16m:48s', '3m:26s', '120m:0s']
如何从该列表中获取分钟和秒数?我希望能够创建一个公式来计算每小时英里数。
【问题讨论】:
0 说出 713 吗?
标签: python string list methods
如果要根据时间计算速度,则需要距离。如果您希望它以英里/小时为单位,您需要将这些时间转换为小时数(或分数)。这可以在列表理解中完成:
timeList = ['7m:13s', '11m:29s', '16m:48s', '3m:26s', '120m:0s']
# converting to hours
hours = [(m*60+s)/3600 for ms in timeList for m,s in [map(int,ms[:-1].split("m:"))]]
#computing speeds:
distance = 1 # mile
mph = [distance/time for time in hours]
print(mph)
# [8.314087759815243, 5.2249637155297535, 3.571428571428571, 17.475728155339805, 0.5]
如果您的距离在匹配列表中,您可以使用 zip 获取每个条目的速度:
miles = [ 10, 5, 8, 9 ]
mph = [distance/time for distance,time in zip(miles,hours)]
# [83.14087759815243, 26.124818577648767, 28.57142857142857, 157.28155339805826]
您可以将两者组合成一行,但它会很丑陋且难以维护:
mph = [distance*3600/(m*60+s) for distance,ms in zip(miles,timeList) for m,s in [map(int,ms[:-1].split("m:"))]]
【讨论】:
遍历timeList并从中提取分钟和秒部分并将其转换为整数以供进一步处理。
timeList = ['7m:13s', '11m:29s', '16m:48s', '3m:26s', '120m:0s']
for element in timeList:
min = int(str(element).split(":")[0].split("m")[0])
sec = int(str(element).split(":")[1].split("s")[0])
print(min,sec)
【讨论】:
从每个项目中删除 m 和 s,然后在 : 上拆分。
timeList = ['7m:13s', '11m:29s', '16m:48s', '3m:26s', '120m:0s']
for item in timeList:
minutes, seconds = item.replace('m', '').replace('s', '').split(':')
minutes, seconds = int(minutes), int(seconds)
print(minutes, seconds)
输出:
7 13
11 29
16 48
3 26
120 0
【讨论】:
您可以使用 str('7m:13s').split(':') 对这两个部分进行切片,然后分别处理分钟和秒部分,如下所示。
json 库允许您缩进您的字典打印并使其更易于阅读输出。
不过,您也可以使用pandas.DataFrame 将输出显示为表格。
既然你提到了计算速度,让我为行驶距离(以英里为单位)制作一些虚拟数据,并用它来计算速度(以英里/小时为单位)。
distances = ['0.5', '1.2', '3.8', '10.0', '100.0']
以下解决方案以小时为单位计算时间并评估速度。
代码
import json
import pandas as pd
timeList = ['7m:13s', '11m:29s', '16m:48s', '3m:26s', '120m:0s']
# dummy data for distance (in miles)
distances = ['0.5', '1.2', '3.8', '10.0', '100.0']
# We will save the time-spans in a
# dictionary post-processing
time_spans = dict()
for i, (ts, distance) in enumerate(zip(timeList, distances)):
tmin, tsec = ts.split(':')
time_spans.update({i: {'distance': float(distance),
'timespan': ts,
'minutes': int(tmin[:-1]),
'seconds': int(tsec[:-1]),
}})
# Print the dictionary (uncomment if necessary)
#print(json.dumps(time_spans, indent=2))
# Print DataFrame: As a table
df = pd.DataFrame(time_spans).T
# Calculate elapsed time (in hours)
df['time'] = df['minutes']/60 + df['seconds']/(60*60)
# Calculate speed: distance/time (in miles/hour)
df['speed'] = df['distance']/df['time']
print(df)
熊猫数据框:
distance timespan minutes seconds time speed
0 0.5 7m:13s 7 13 0.120278 4.15704
1 1.2 11m:29s 11 29 0.191389 6.26996
2 3.8 16m:48s 16 48 0.28 13.5714
3 10 3m:26s 3 26 0.0572222 174.757
4 100 120m:0s 120 0 2 50
【讨论】:
更新:
如果不清楚的话,我是 python 的初学者。
我想使用列表理解并将我所有的方法和作业放在一行中,但这让我很难理解。我的最终代码逐步完成了整个过程。可能不是最有效的方法,但我能够弄清楚。
我使用切片、剥离和拆分将我的数字从字符串中取出,然后将每个数字转换为所需的单位。
distanceList = [0.04, 0.05, 0.91, 0.16, 18]
timeList = ['7m:13s', '11m:29s', '16m:48s', '3m:26s', '120m:0s']
zipList = zip(distanceList, timeList)
for i in zipList:
distance = i[0]
time = i[1]
numbers = time.split("m:")
minute = numbers[0]
sec = numbers[1].strip("s")
hoursmin = (float(minute) / 60)
hourssec = (float(sec) / 3600)
hours = (hoursmin + hourssec)
mph = (distance / hours)
print("Distance: ", distance, "Time: ", time, "Speed: ", round(mph, 2), "miles/hr")
输出:
('Distance: ', 0.04, 'Time: ', '7m:13s', 'Speed: ', 0.33, 'miles/hr')
('Distance: ', 0.05, 'Time: ', '11m:29s', 'Speed: ', 0.26, 'miles/hr')
('Distance: ', 0.91, 'Time: ', '16m:48s', 'Speed: ', 3.25, 'miles/hr')
('Distance: ', 0.16, 'Time: ', '3m:26s', 'Speed: ', 2.8, 'miles/hr')
('Distance: ', 18, 'Time: ', '120m:0s', 'Speed: ', 9.0, 'miles/hr')
【讨论】: