Python 尝试使用max在数组中查找最新日期,但结果不同

Python 尝试使用max在数组中查找最新日期,但结果不同,python,date,Python,Date,我试图使用PythonMax在数组中查找最新日期,但我得到了不同的结果 这方面的预期结果很好 >>> a = ["10-09-1988","20-10-1999"] >>> max(a) '20-10-1999' 因为1999年10月20日是最晚的日期 但是对于这个 >>> a = ["10-10-1999","20-10-1988"] >>> max(a) '20-10-1988' 预期产量为 10-10-1999

我试图使用PythonMax在数组中查找最新日期,但我得到了不同的结果

这方面的预期结果很好

>>> a = ["10-09-1988","20-10-1999"]
>>> max(a)
'20-10-1999'
因为1999年10月20日是最晚的日期

但是对于这个

>>> a = ["10-10-1999","20-10-1988"]
>>> max(a)
'20-10-1988'
预期产量为

10-10-1999
因为1999年10月10日是最晚的日期,但我得到的是1988年10月20日

如何在python中的元素上获取数组中的最新日期(日期格式为dd-mm-yyy)


对于上面我想要的(10-10-1999)作为输出

您需要使用
将字符串转换为datetime对象:

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

您需要使用
将字符串转换为datetime对象:

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

您可以将字符串转换为
datetime
对象,也可以使用以下代码:

>>> 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'
它比将字符串转换为
datetime
对象更有效:

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

您可以将字符串转换为
datetime
对象,也可以使用以下代码:

>>> 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'
它比将字符串转换为
datetime
对象更有效:

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

为了比较它们,您需要将以字符串表示的日期转换为
datetime
对象

>>> 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)

为了比较它们,您需要将以字符串表示的日期转换为
datetime
对象

>>> 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)

字符串是按字典顺序进行比较的,它们不是日期对象。将字符串转换为日期对象,然后比较日期。它根据字符串比较给出正确的结果。将其转换为datetime对象,然后进行比较。字符串按字典顺序进行比较,它们不是日期对象。将字符串转换为date对象,然后比较日期。它根据字符串比较给出正确的结果。将其转换为datetime对象,然后进行比较。