Python将函数应用于列表列表

时间:2015-02-01 21:03:35

标签: python list

我编写了一个函数来根据从列表中取出的两个值执行计算,然后追加结果。我想知道如何调整此函数来对列表列表中的所有列表执行计算,到目前为止,我遇到了令人沮丧的失败。

这就是我所知道的目的:

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']]

非常感谢您的建议和帮助

2 个答案:

答案 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实际上是如何感觉像嵌套的循环函数调用。

编辑: 顺便说一下,这是一个正在运行的代码。请注意我所做的更改。子列表需要一个逗号,并且分区需要通过十进制数而不是整数来完成,否则在下一步中尝试划分速度时可能会得到除零(但是,您也可以检查零那里!)

LINK:http://ideone.com/0rlCLy

编辑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

虽然可以避免地图到列表转换并直接用作迭代列表的普通迭代器(也可以更高效!)