我有一个列表(从.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'
以及最大值。
答案 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
含糊不清,你应该小心。