您显示的不是时间列表,而是字符串元组。元组是不可变的,不能排序,只有像列表这样的可变集合可以。所以首先你需要将你的元组转换为一个列表:
times = ['5:00PM','2:00PM','7:00AM','8:45PM','12:00PM']
您现在可以尝试对该列表进行排序,但字符串不会按照您期望的方式排序。相反,您需要创建一个自定义排序函数,将列表中的值临时转换为struct_time 对象并使用这些对象进行排序。
import time
time_format = '%I:%M%p' # match hours, minutes and AM/PM
def compare_as_time(time_str1, time_str2):
# parse time strings to time objects
time1 = time.strptime(time_str1, time_format)
time2 = time.strptime(time_str2, time_format)
# return comparison, sort expects -1, 1 or 0 to determine order
if time1 < time2:
return -1
elif time1 > time2:
return 1
else:
return 0
现在您可以调用sorted() 并传入您的列表和自定义比较函数,您将获得一个字符串列表,按这些字符串中的时间排序:
sorted_times = sorted(times, compare_as_time)
Python 3 的注意事项: 前面的示例假定 Python 2。如果您使用的是 Python 3,则需要将比较函数转换为 key function。这可以使用functools.cmp_to_key() 来完成,如下所示:
form functools import cmp_to_key
sorted_times = sorted(times, key=cmp_to_key(compare_as_time))