2016-09-26 3 views
0

Ich habe eine Liste (aus einer CSV-Datei erstellt wurde) mit einer Ausgabe wie folgt aus:Finden entsprechenden Wert mit maximal in einer Liste von Listen

[('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')......

Das erste Element ist der Zeitwert. Der zweite ist der Messpunkt. Die dritte ist die Anzahl der Autos, die in diesem Zeitintervall gemessen wurden.

Es gibt 536 Artikel insgesamt.

Für mein Programm brauche ich das Maximum des dritten Elements in Stücken von 12 (vor Mittag, nach Mittag).

Für die maximale ich den Code geschrieben haben:

mit einer Leistung wie diese 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)

Dies bietet mir:

[922, 1637, ...] 

aber wie bekomme ich den Wert entsprechende Zeit (erstes Element) damit? In diesem Beispiel sollte das Programm '25.09.2016 12:00:00' und '25.09.2016 18:00:00' zusammen mit dem Maximum ausgeben.

Antwort

1

Iterieren Sie die Tupel (nicht die letzten Elemente in jedem Tupel) und verwenden Sie die Funktion key in max, um das letzte Element zu erhalten, das zur Berechnung des Maximums verwendet wird.

Sie können dies mit einem Liste Verständnis:

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

verwenden die Lambda-Funktion geeignet ist, können Sie es mögen tun:

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

dann können Sie die dreifache weiter verarbeiten. ..

BTW, in Ihrem Code, der i ist mehrdeutig, sollten Sie darauf achten.

Verwandte Themen