ค้นหาวัตถุวันที่และเวลาที่เก่าแก่ที่สุด / อายุน้อยที่สุดในรายการ


94

ฉันมีรายการวัตถุวันที่และเวลาและฉันต้องการค้นหาวัตถุที่เก่าแก่ที่สุดหรืออายุน้อยที่สุด วันที่เหล่านี้บางส่วนอาจเกิดขึ้นในอนาคต

from datetime import datetime

datetime_list = [
    datetime(2009, 10, 12, 10, 10),
    datetime(2010, 10, 12, 10, 10),
    datetime(2010, 10, 12, 10, 10),
    datetime(2011, 10, 12, 10, 10), #future
    datetime(2012, 10, 12, 10, 10), #future
]

วิธีใดที่เหมาะสมที่สุดในการทำเช่นนั้น? ฉันกำลังคิดเปรียบเทียบ datetime.now () กับแต่ละรายการ


6
วิธีการเกี่ยวกับmaxและmin?
JoshD

9
ไม่มีคำถามที่คล้ายกันใน stackoverflow ฉันค้นหาคำตอบแล้วดังนั้นฉันแน่ใจว่ามันจะเป็นประโยชน์กับคนอื่น ๆ
panosl

คำตอบ:


129

เก่าที่สุด:

oldest = min(datetimes)

อายุน้อยที่สุดก่อนหน้านี้:

now = datetime.datetime.now(pytz.utc)
youngest = max(dt for dt in datetimes if dt < now)

คุณหมายถึงเก่าที่สุด? ( Oldest before now)
Bulgantamir

ใน Python 3 ฉันคิดว่านี่เป็นข้อบกพร่อง ถ้าฉันให้อาร์เรย์นี้ ["April2020", "March2020"] min จะให้ "April2020" เหมือนกับว่า min จะให้ล่าสุด อย่างไรก็ตามถ้าฉันให้ ["เมษายน 2020", "มกราคม 2021", "มีนาคม 2020"] ขั้นต่ำจะให้ฉันเป็น "April2020" ฉันค่อนข้างมั่นใจว่า min จะให้ค่าต่ำสุดตามตัวอักษรซึ่งไม่จำเป็นต้องเป็นวันที่ล่าสุด
ScottyBlades

1
@ScottyBlades นั่นเป็นเพราะในตัวอย่างของคุณค่าของคุณเป็นสตริง (ซึ่งเกิดขึ้นเพื่อแสดงวันที่ แต่ไม่ใช่dateค่าที่แท้จริง) ดังนั้นจึงสามารถเปรียบเทียบได้ตามตัวอักษรเท่านั้น หากคุณมีอาร์เรย์dateหรือdatetimeค่าแทนพวกเขาจะได้รับการเปรียบเทียบอย่างถูกต้อง
จอร์แดน

30

ระบุรายการวันที่dates:

วันที่สูงสุดคือ max(dates)

วันที่ต่ำสุดคือ min(dates)



6

คุณลองสิ่งนี้หรือยัง:

>>> from datetime import datetime as DT
>>> l =[]
>>> l.append(DT(1988,12,12))
>>> l.append(DT(1979,12,12))
>>> l.append(DT(1979,12,11))
>>> l.append(DT(2011,12,11))
>>> l.append(DT(2022,12,11))
>>> min(l)
datetime.datetime(1979, 12, 11, 0, 0)
>>> max(l)
datetime.datetime(2022, 12, 11, 0, 0)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.