【发布时间】:2020-07-21 17:28:35
【问题描述】:
所以我有一个列表,其中包含其他列表。这些内部列表的第一个元素是浮点 id,第二个元素是日期。我希望根据日期对该列表进行排序,但要确保该日期的相应 id 与其相应的日期保持一致...
这就是原始列表的样子...
[[1.33315, '2020/07/22'],[1.33315, '2020/07/25'],[1.33315, '2020/07/27'],[1.346646, '2020/07/21'], [1.345646, '2020/07/21'],[1.345646, '2020/07/22'],[1.345646, '2020/07/25']]
我希望它像这样排序
[[1.346646, '2020/07/21'],[1.345646, '2020/07/21'],[1.33315, '2020/07/22'],[1.345646, '2020/07/22'],[1.33315, '2020/07/25'],[1.345646, '2020/07/25'],[1.33315, '2020/07/27']]
我需要排序尽可能快,同时又要简单。我尝试使用插入排序,但它似乎不起作用
这是代码,dates 是保存前面提到的列表的变量
def date_sort(self, dates):
for i in range(1,len(dates)):
items_to_insert = dates[i][1]
print(items_to_insert)
j = i - 1
y = datetime.strptime(dates[j][1],"%Y/%m/%d")
z = datetime.strptime(items_to_insert,"%Y/%m/%d")
while j >= 0 and y > z:
dates[j+1] = dates[j]
j-=1
break
else:
dates[j+1][1] = items_to_insert
print(dates)
这是我得到的输出...
[[1.33315, '2020/07/22'], [1.33315, '2020/07/25'], [1.33315, '2020/07/27'], [1.33315, '2020/07/27'], [1.33315, '2020/07/27'], [1.33315, '2020/07/27'], [1.33315, '2020/07/27']]
如您所见,其中一些值已完全改变。我不明白我错过了什么,或者有没有更好的方法来做到这一点?谢谢!
【问题讨论】:
-
不要从头开始实现排序,使用内置的
sorted -
不需要用你自己的排序算法重新发明轮子,当你可以使用内置函数并给它一个键时:
sorted(my_list, key=lambda x:x[::-1])应该用最后一个元素对my_list进行排序(在在这种情况下,日期)优先。而且由于您将日期设置为年/月/日,因此它们应该正确排序。您想要一个专门纠正您的插入排序算法的解决方案,还是这样就足够了? -
哦,非常感谢...我不知道你能做到这一点...非常感谢:)...这绰绰有余
标签: python list sorting insertion-sort