2017-04-19 1 views
0

Ich versuche, spätestes Datum in einem Array mit Python max aber im finden unterschiedliche Ergebnisse bekommen für dieseDer Versuch, spätestes Datum in einem Array mit max aber immer unterschiedliche Ergebnisse

Das erwartete Ergebnis zu finden ist in Ordnung

>>> a = ["10-09-1988","20-10-1999"] 
>>> max(a) 
'20-10-1999' 

Seit 20-10-1999 ist spätestes Datum

Aber für diesen einen

>>> a = ["10-10-1999","20-10-1988"] 
>>> max(a) 
'20-10-1988' 

Die erwartete Ausgabe ist

10-10-1999 

Seit 1999.10.10 späteste Datum ist aber im 20-10-1988

bekommen Wie späteste Datum in Array auf Elemente in Python (Datumsformat ist TT-MM bekommen -yyy)

für den oben, den ich will (1999.10.10) als Ausgang

+0

Strings werden lexikografisch verglichen, sie sind keine Datumsobjekte. – Kasramvd

+2

Konvertieren Sie die Zeichenfolge in ein Datumsobjekt und vergleichen Sie das Datum. – pkuphy

+0

Es gibt das richtige Ergebnis nach dem String-Vergleich. Konvertieren Sie es in Datetime-Objekt und vergleichen Sie dann. –

Antwort

2

Sie key verwenden müssen, um die Zeichenfolge zu Datetime-Objekt zu konvertieren:

>>> import datetime 
>>> a = ["10-09-1988","20-10-1999"] 
>>> max(a, key=lambda x: datetime.datetime.strptime(x, "%d-%m-%Y")) 
'20-10-1999' 
0

Sie können String datetime Objekt konvertieren, oder vielleicht der folgenden Code kann dies tun:

>>> a = ["10-09-1988","20-02-1989","20-09-1988"] 
>>> max(a,key=lambda x:(x[6:10],x[3:5],x[:2])) 
'20-02-1989' 

Es ist effizienter als String in datetime Objekt konvertieren:

>>> import timeit 
>>> s = """ 
... a=['28-07-2002', '12-02-1976', '23-10-1967', '27-04-1913', '05-06-1901', '06-12-1964', '04-12-1982', '03-04-1929', '07-02-1943', '03-08-1955'] 
... import datetime 
... max(a, key=lambda x: datetime.datetime.strptime(x, "%d-%m-%Y")) 
... """ 
>>> timeit.timeit(stmt=s,number=10000) 
1.0200450420379639 
>>> s = """ 
... a=['28-07-2002', '12-02-1976', '23-10-1967', '27-04-1913', '05-06-1901', '06-12-1964', '04-12-1982', '03-04-1929', '07-02-1943', '03-08-1955'] 
... import datetime 
... max(a,key=lambda x:(x[6:10],x[3:5],x[:2])) 
... """ 
>>> timeit.timeit(stmt=s,number=10000) 
0.04339408874511719 
0

Um vergleichen Sie müssen das als String dargestellte Datum in datetime Objekt konvertieren.

>>> from datetime import datetime 
>>> a = ["10-10-1999","20-10-1988"] 
>>> for i, date in enumerate(a): 
...  a[i] = datetime.strptime(a[i], "%d-%m-%Y") 
... 
>>> a 
[datetime.datetime(1999, 10, 10, 0, 0), datetime.datetime(1988, 10, 20, 0, 0)] 
>>> max(a) 
datetime.datetime(1999, 10, 10, 0, 0) 
Verwandte Themen