gpt4 book ai didi

python - 在包含格式为 ('hour' 、 'min' 、 'AM/PM' 的时间元组的列表中查找时间的最大值

转载 作者:太空狗 更新时间:2023-10-30 00:34:12 26 4
gpt4 key购买 nike

我有一个代表不同时间的元组列表

timeList = [('4', '12', 'PM'), ('8', '23', 'PM'), ('4', '03', 'AM'), ('1', '34', 'AM'), 
('12', '48', 'PM'), ('4', '13', 'AM'), ('11', '09', 'AM'), ('3', '12', 'PM'),
('4', '10', 'PM')]

我想从列表中返回最大值,经过一些搜索我意识到我可以使用 max 中的键首先按 AM 或 PM 进行搜索。
print(max(timeList, key = operator.itemgetter(2)))

然而,当我运行它时,我得到了错误的最大值 ('4', '12', 'PM')
我考虑了一下,考虑到 8:23 应该是最大值,这不仅没有意义,而且我还意识到 12:48 可能会返回最大值,因为它是 PM,而且在我的搜索中技术上也大于 8。

话虽这么说,但鉴于列表的格式无法更改,我如何才能得到这个 max 来找到最晚的可能时间。

最佳答案

只需定义一个适当的键函数。您希望 int(hour)int(minute)'PM' 已经按字典序排序高于 "AM",但它应该被视为第一,所以。此外,您需要对小时取模 12,以便 12pm/am 内排序少于其他数字:

In [39]: timeList = [('4', '12', 'PM'), ('8', '23', 'PM'), ('4', '03', 'AM'), ('1', '34', 'AM'),
...: ('12', '48', 'PM'), ('4', '13', 'AM'), ('11', '09', 'AM'), ('3', '12', 'PM'),
...: ('4', '10', 'PM')]

In [40]: def key(t):
...: h, m, z = t
...: return z, int(h)%12, int(m)
...:

In [41]: max(timeList,key=key)
Out[41]: ('8', '23', 'PM')

但是最有意义的是实际使用datetime.time对象,而不是假装字符串元组是存储时间的好方法。 p>

所以像这样:

In [49]: def to_time(t):
...: h, m, z = t
...: h, m = int(h)%12, int(m)
...: if z == "PM":
...: h += 12
...: return datetime.time(h, m)
...:

In [50]: real_time_list = list(map(to_time, timeList))

In [51]: real_time_list
Out[51]:
[datetime.time(16, 12),
datetime.time(20, 23),
datetime.time(4, 3),
datetime.time(1, 34),
datetime.time(12, 48),
datetime.time(4, 13),
datetime.time(11, 9),
datetime.time(15, 12),
datetime.time(16, 10)]

In [52]: list(map(str, real_time_list))
Out[52]:
['16:12:00',
'20:23:00',
'04:03:00',
'01:34:00',
'12:48:00',
'04:13:00',
'11:09:00',
'15:12:00',
'16:10:00']

注意,现在max“正常工作”:

In [54]: t = max(real_time_list)

In [55]: print(t)
20:23:00

如果您需要一个漂亮的字符串来打印,只需在此时进行格式化:

In [56]: print(t.strftime("%I:%M %p"))
08:23 PM

关于python - 在包含格式为 ('hour' 、 'min' 、 'AM/PM' 的时间元组的列表中查找时间的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48818380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com