我有以下二维数组:
arr = [
["A", "B", "C", "10.03.2030", "14:06"],
["W", "R", "Q", "09.04.2025", "12:06"],
["Y", "X", "V", "11.05.2022", "12:06"],
["Z", "N", "H", "10.03.2030", "14:06"],
]
我想通过&对数组进行排序时间,在python中有一种快速的方法吗?
提前致谢
和j
答案 0 :(得分:5)
您可以先将日期转换为ISO8601格式进行排序(而不是使用datetime.strptime
转换为实际日期非常慢),然后使用已标准化的时间字符串断开关系:
lst = sorted(arr, key=lambda x: (x[3].split('.')[::-1], x[-1]))
print(lst)
x[3].split('.')[::-1]
从原始日期字符串构建ISO日期列表,将年份放在第一个月,下一个月,然后是日期。
[['Y', 'X', 'V', '11.05.2022', '12:06'],
['W', 'R', 'Q', '09.04.2025', '12:06'],
['A', 'B', 'C', '10.03.2030', '14:06'],
['Z', 'N', 'H', '10.03.2030', '14:06']]
答案 1 :(得分:0)
正如answer中所述,您应该使用itemgetter来实现此目的。
要按时间对数据进行排序,请使用:
from operator import itemgetter
print(sorted(arr, key=itemgetter(4)))
[['W', 'R', 'Q', '09.04.2025', '12:06'],
['Y', 'X', 'V', '11.05.2022', '12:06'],
['A', 'B', 'C', '10.03.2030', '14:06'],
['Z', 'N', 'H', '10.03.2030', '14:06']]
如果需要按日期(年份)排序,则需要定义单独的函数或使用lamda。我写了两个解决方案:
def sorting(item):
return item[3].split('.')[2]
print(sorted(arr, key=sorting))
# using lambda
print(sorted(arr, key= lambda item:item[3].split('.')[2]))
[['Y', 'X', 'V', '11.05.2022', '12:06'],
['W', 'R', 'Q', '09.04.2025', '12:06'],
['A', 'B', 'C', '10.03.2030', '14:06'],
['Z', 'N', 'H', '10.03.2030', '14:06']]
这样您就不会依赖第三方软件包导入。
答案 2 :(得分:0)
非常简短而且整齐的代码比上面给出的其他代码
lst = sorted(arr, key=lambda x: (x[3].split('.')[::-1], x[-1]))