我编写了一个函数来根据从列表中取出的两个值执行计算,然后追加结果。我想知道如何调整此函数来对列表列表中的所有列表执行计算,到目前为止,我遇到了令人沮丧的失败。
这就是我所知道的目的:
import datetime
Horse = ['Sea Biscuit', '10:57:06', '10:58:42']
#My Function used to get times from the list and calculate speed in MPH
def get_speed():
time1 = Horse[1]
time2 = Horse[2]
d = 1 #Assuming a distance of 1 mile
FMT = '%H:%M:%S'
tdelta = datetime.datetime.strptime(time2, FMT) - datetime.datetime.strptime(time1, FMT)
#Convert from timedelta HH:MM:SS format to hours by first converting to a string
stringtime=str(tdelta)
parts = stringtime.split(':')
hours = int(parts[0])*1 + int(parts[1])/60 + int(parts[2])/3600
speed = round((d/hours),2)
Horse.append (speed)
get_speed()
所以我希望这个函数的列表列表如下:
Horses = [['Sea Biscuit', '10:57:06', '10:58:42']['Red Rum', '10:57:06', '10:59:02']['Blazing saddles', '10:57:06', '10:59:16']]
非常感谢您的建议和帮助
答案 0 :(得分:1)
可能存在更优雅的基于类的解决方案,但处理问题的最快方法是使用for循环:
for horse in Horses:
def get_speed(horse)
然后你想要找出存储输出的位置。
答案 1 :(得分:1)
这取决于您希望如何输出数据。虽然我会通过考虑您希望输出也是一个列表来回答这个问题。
Python的Map
函数可能是您想要查看的内容:
您可以执行以下操作:
times = map(get_speed, Horses)
所以,基本上,(语法)
variable = map(func, list)
Map在列表的每个成员上运行该函数。
在python中有一个关于Map函数的有趣讨论:https://stackoverflow.com/a/10973817/1318675答案还解释了map实际上是如何感觉像嵌套的循环函数调用。
编辑: 顺便说一下,这是一个正在运行的代码。请注意我所做的更改。子列表需要一个逗号,并且分区需要通过十进制数而不是整数来完成,否则在下一步中尝试划分速度时可能会得到除零(但是,您也可以检查零那里!)
编辑2 : OP使用的是Python 3.在Python 3中,地图不返回列表,而是将迭代器返回到列表中。因此,代码需要更改以添加以下内容:
return Horse #Returns the changed horse object back to map
Horses = list(map(get_speed, Horses)) #convert iterator back to list
在此处运行代码:http://ideone.com/EwcCnQ
虽然可以避免地图到列表转换并直接用作迭代列表的普通迭代器(也可以更高效!)