[英]how to arrange a list in the order of index od another sorted list in python?
我有 2 个清单说,
dates=['4/21/2015', '10/14/2014', '9/16/2014', '7/10/2014', '8/11/2014', '8/3/2014', '7/20/2014', '7/6/2014', '4/21/2015', '4/21/2015']
events=[a,b,c,d,e,f,g,h,i,j]
我按时间顺序对列表日期进行了排序,并将值放在列表日期 1 中
dates1=['7/6/2014', '7/10/2014', '7/20/2014', '8/3/2014', '8/11/2014', '9/16/2014', '10/14/2014', '4/21/2015', '4/21/2015', '4/21/2015']
现在如何按照日期 1 的时间顺序排列事件?
解决此问题的最简单方法是将两个列表zip
在一起,然后根据dates
数组的日期转换对它们进行排序。
例子 -
>>> from datetime import datetime
>>> dates=['4/21/2015', '10/14/2014', '9/16/2014', '7/10/2014', '8/11/2014', '8/3/2014', '7/20/2014', '7/6/2014', '4/21/2015', '4/21/2015']
>>> events=['a','b','c','d','e','f','g','h','i','j']
>>> s = sorted(zip(dates, events), key = lambda x: datetime.strptime(x[0],'%m/%d/%Y'))
>>> s
[('7/6/2014', 'h'), ('7/10/2014', 'd'), ('7/20/2014', 'g'), ('8/3/2014', 'f'), ('8/11/2014', 'e'), ('9/16/2014', 'c'), ('10/14/2014', 'b'), ('4/21/2015', 'a'), ('4/21/2015', 'i'), ('4/21/2015', 'j')]
然后你可以得到使用列表理解排序的事件列表 -
>>> sortedevents = [x[1] for x in s]
>>> sortedevents
['h', 'd', 'g', 'f', 'e', 'c', 'b', 'a', 'i', 'j']
zip
函数的作用是将作为参数提供给它的列表(可迭代对象)中相同索引处的元素组合成一个元组列表(第 i 个位置的每个元组包含参数中提供的列表中第 i 个位置的元素的组合)。
这将做到:
sortedevents = sorted(zip(dates, events), key = lambda i: dates1.index(i[0]))
首先我们将日期和事件组合成匹配的元组,然后我们使用排序列表dates1
对元组进行排序
要自行获取已排序的事件列表:
events = [e[1] for e in sortedevents]
Anand 的答案可能是首选,因为它不需要单独排序的日期列表,即不需要日期dates1
另一种方法是使用 numpy 的 argsort 函数,尽管它需要您将事件列表转换为数组。
import numpy as np
from datetime import datetime
dates = ['4/21/2015', '10/14/2014', '9/16/2014', '7/10/2014', '8/11/2014', '8/3/2014', '7/20/2014', '7/6/2014', '4/21/2015', '4/21/2015']
events = np.array(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'])
datetimes = [datetime.strptime(date, '%m/%d/%Y') for date in dates]
events_sorted = events[np.argsort(datetimes)]
print(events_sorted)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.