在列表列表中找到最大值的相应值

时间:2016-09-26 13:13:20

标签: python list python-3.x

我有一个列表(从.csv文件创建),输出如下:

Const NET_FW_PROFILE2_PRIVATE = 2 Set fwPolicy2 = CreateObject("HNetCfg.FwPolicy2") CurrentProfiles = fwPolicy2.CurrentProfileTypes if ( CurrentProfiles AND NET_FW_PROFILE2_PRIVATE ) then InterfaceArray = fwPolicy2.ExcludedInterfaces(NET_FW_PROFILE2_PRIVATE) if (IsEmpty(InterfaceArray)) then WScript.Echo( "InterfaceArray is Empty" ) else WScript.Echo( Join(InterfaceArray) ) end if fwPolicy2.ExcludedInterfaces(NET_FW_PROFILE2_PRIVATE) = InterfaceArray end if

第一个元素是时间值。第二个是测量点。第三个是在该时间间隔内测量的汽车数量。

共有536项。

对于我的程序,我需要12个块中的第三个元素的最大值(中午之前,中午之后)。

我最多编写代码:

[('25.09.2016 01:00:00', 'MQ100D1_3_1_4', '225'), ('25.09.2016 02:00:00', 'MQ100D1_3_1_4', '173'), ('25.09.2016 03:00:00', 'MQ100D1_3_1_4', '106'), ('25.09.2016 04:00:00', 'MQ100D1_3_1_4', '74'), ('25.09.2016 05:00:00', 'MQ100D1_3_1_4', '84'), ('25.09.2016 06:00:00', 'MQ100D1_3_1_4', '122'), ('25.09.2016 07:00:00', 'MQ100D1_3_1_4', '110'), ('25.09.2016 08:00:00', 'MQ100D1_3_1_4', '177'), ('25.09.2016 09:00:00', 'MQ100D1_3_1_4', '301'), ('25.09.2016 10:00:00', 'MQ100D1_3_1_4', '552'), ('25.09.2016 11:00:00', 'MQ100D1_3_1_4', '812'), ('25.09.2016 12:00:00', 'MQ100D1_3_1_4', '922'), ('25.09.2016 13:00:00', 'MQ100D1_3_1_4', '970'), ('25.09.2016 14:00:00', 'MQ100D1_3_1_4', '1264'), ('25.09.2016 15:00:00', 'MQ100D1_3_1_4', '1338'), ('25.09.2016 16:00:00', 'MQ100D1_3_1_4', '1347'), ('25.09.2016 17:00:00', 'MQ100D1_3_1_4', '1491'), ('25.09.2016 18:00:00', 'MQ100D1_3_1_4', '1637'), ('25.09.2016 19:00:00', 'MQ100D1_3_1_4', '1544'), ('25.09.2016 20:00:00', 'MQ100D1_3_1_4', '974'), ('25.09.2016 21:00:00', 'MQ100D1_3_1_4', '503'), ('25.09.2016 22:00:00', 'MQ100D1_3_1_4', '359'), ('25.09.2016 23:00:00', 'MQ100D1_3_1_4', '218'), ('25.09.2016 23:59:59', 'MQ100D1_3_1_4', '132')......

这为我提供了这样的输出:

i = 0
topHour = []
for i in range(0, len(finalList), 12):
    values = max([int(i[-1]) for i in finalList[i:i+12]])
    topHour.append(values)

但是,如何获得相应的时间值(第一个元素)呢?在这个例子中,程序应该输出[922, 1637, ...] '25.09.2016 12:00:00'以及最大值。

2 个答案:

答案 0 :(得分:1)

迭代元组(不是每个元组中的最后一项)并使用key中的max函数来获取用于计算最大值的最后一项。

您可以使用列表理解执行此操作:

top_hour = [max(lst[i:i+12], key=lambda x: int(x[-1])) for i in range(0, len(lst), 12)]
#                            ^^^
print(top_hour)    
# [('25.09.2016 12:00:00', 'MQ100D1_3_1_4', '922'), ('25.09.2016 18:00:00', 'MQ100D1_3_1_4', '1637')]

答案 1 :(得分:0)

使用lambda函数是合适的,你可以这样做:

max(finalList[i:i+12]], key=lambda x: int(x[-1]))

然后你可以进一步处理三重......

顺便说一句,在你的代码中,i含糊不清,你应该小心。