[Tutor] seek and slice a range in a list of dates
Kent Johnson
kent37 at tds.net
Sat Feb 9 22:22:14 CET 2008
washakie wrote:
> Hello,
>
> I'm using the code below to select the closest dates in a dictionary of
> dates, to selected dates (Tstart, Tend)... Now, I need to get all the dates
> (slice) from the dictionary in between the two dates TstartNew and TendNew.
> Basically, I need to know what the 'index' is for them in the in the
> dictionay dates_dt. How can I get that information out of the lambda
> functions? does python have a 'find' function??
> dates_dt={}
> for i in range(len(dates_list)):
> dates_dt[i]=datetime.datetime(year,month,day,hour,minute,seconds)
Why do you use a dict here? A list seems more appropriate. Where are
year,month,day,hour,minute,seconds coming from?
> TstartNew=sorted(dates_dt.values(),key=lambda d: abs(Tstart - d))[0]
> TendNew=sorted(dates_dt.values(), key=lambda d: abs(Tend -d))[0]
You could use min() and max() instead of sorting (twice!)
How about something like this (untested):
dates_dt=[ datetime.datetime(year,month,day,hour,minute,seconds) for x
in dates_list ]
adjusted to actually get the dates from somewhere...
TstartNew=min(range(len(dates_dt)),
key=lambda i: abs(Tstart - dates_dt[i]))
This gives you the index of the date with the min difference.
TendNew=max(range(len(dates_dt)),
key=lambda i: abs(Tend - dates_dt[i]))
for the index of the max difference.
The above will work if dates_dt is a dict or a list.
Dates = dates_dt[TstartNew+1:TendNew]
which gives you the dates between and not including the min and max, if
dates_dt is a list. For a dict, use
Dates = [ dates_dt[i] for i in range(TstartNew+1, TendNew) ]
Kent
More information about the Tutor
mailing list